과일 담기
문제
과일 가게에는 1번부터 N번까지 번호가 붙은 N종류의 과일이 있다. 각 종류의 과일은 넉넉하게 쌓여 있어서 몇 개든 집을 수 있다.
손님은 바구니 하나에 과일을 모두 M개 담는다. 같은 종류의 과일을 여러 개 담아도 된다. 바구니에 담고 나면 어떤 순서로 집었는지는 알 수 없고, 어떤 종류를 몇 개 담았는지만 남는다. 따라서 담은 종류와 개수가 같다면 집은 순서가 어떻든 같은 경우로 본다.
손님이 과일을 담을 수 있는 모든 경우를 사전 순으로 출력하는 프로그램을 작성하여라. 각 경우는 바구니에 담긴 과일의 번호를 작은 것부터 차례대로 적는다. 같은 번호가 여러 번 나올 수 있다.
예를 들어 N=3종류의 과일에서 M=2개를 담는다고 해보자. 이때 담을 수 있는 경우는 모두 6가지이며, 사전 순으로 나열하면 다음의 표와 같다.
| 경우 | 첫 번째로 적는 번호 | 두 번째로 적는 번호 |
|---|---|---|
| 1번 | 1 | 1 |
| 2번 | 1 | 2 |
| 3번 | 1 | 3 |
| 4번 | 2 | 2 |
| 5번 | 2 | 3 |
| 6번 | 3 | 3 |
1번 경우처럼 같은 종류를 두 개 담아도 되므로 1 1 이 표에 들어 있다. 반면에 2 1 은 표에 없다. 1번 과일과 2번 과일을 하나씩 담은 경우는 2번 경우의 1 2 로 이미 한 번 적었고, 집은 순서는 보지 않기 때문이다.
종류가 하나 늘어나면 경우도 늘어난다. 같은 M=2에서 N=4라면 담을 수 있는 경우는 다음의 표와 같이 10가지가 된다.
| 경우 | 첫 번째로 적는 번호 | 두 번째로 적는 번호 |
|---|---|---|
| 1번 | 1 | 1 |
| 2번 | 1 | 2 |
| 3번 | 1 | 3 |
| 4번 | 1 | 4 |
| 5번 | 2 | 2 |
| 6번 | 2 | 3 |
| 7번 | 2 | 4 |
| 8번 | 3 | 3 |
| 9번 | 3 | 4 |
| 10번 | 4 | 4 |
표를 보면 각 경우의 번호가 왼쪽에서 오른쪽으로 갈 때 작아지는 일이 없다. 같은 번호가 이어지는 것은 되지만, 앞의 번호보다 작은 번호가 뒤에 오는 것은 되지 않는다. 담은 종류와 개수가 같은 경우를 한 번만 적기 위한 규칙이다.
입출력 예시
예시 1
입력
3 2
출력
1 1 1 2 1 3 2 2 2 3 3 3
예시 2
입력
1 1
출력
1
예시 3
입력
2 2
출력
1 1 1 2 2 2
입력 조건
가장 먼저 과일 가게에 있는 과일의 종류 수 N이 자연수로 주어진다. N은 1 이상 8 이하의 자연수다.
이어서 같은 줄에 바구니에 담을 과일의 개수 M이 공백을 기준으로 구분되어 주어진다. M은 1 이상 8 이하의 자연수이며, 과일의 종류 수인 N보다 크지 않다.
따라서 입력은 한 줄이며, 그 줄에는 자연수 두 개가 공백 하나로 구분되어 들어 있다.
출력 조건
과일을 담을 수 있는 모든 경우를 사전 순으로 한 줄에 하나씩 출력한다. 한 줄에는 바구니에 담긴 M개의 과일 번호를 작은 것부터 차례대로 적는다. 같은 번호가 여러 번 나올 수 있다.
이때 각 번호 뒤에 공백을 하나 붙여서 출력한다. 그래서 줄의 마지막 번호 뒤에도 공백이 하나 남는다. 또한 모든 경우를 출력한 뒤에 빈 줄이 하나 더 붙는다. 그래서 출력의 마지막 세 글자는 차례대로 공백, 줄바꿈, 줄바꿈이다.
요구사항
- 같은 종류의 과일을 여러 개 담아도 됩니다
- 담은 종류와 개수가 같다면 같은 경우로 보므로, 각 경우는 한 번만 출력합니다
- 각 경우의 번호는 작은 것부터 차례대로 적으며, 앞의 번호보다 작은 번호가 뒤에 오지 않습니다
- 각 번호 뒤에 공백을 하나 붙이므로 줄의 마지막 번호 뒤에도 공백이 하나 남습니다
- 모든 경우를 출력한 뒤에 빈 줄을 하나 더 출력합니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 14개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 14개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 14개를 전부 통과해야 해결입니다.
1 1
1
2 2
1 1 1 2 2 2
3 2
1 1 1 2 1 3 2 2 2 3 3 3
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.