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