앨범 여섯 장
문제
사진관에서는 한 면에 사진을 여섯 장씩 붙이는 앨범을 만든다. 손님은 후보 사진을 k장 가져오고, 사진관은 그 가운데 여섯 장을 골라서 한 면을 채운다.
후보 사진에는 서로 다른 번호가 적혀 있고, 번호는 작은 것부터 큰 것까지 오름차순으로 주어진다. 한 면에 같은 사진을 두 번 붙이지는 않는다. 또한 여섯 장을 어느 자리에 붙였는지는 적어 두지 않으므로, 고른 사진이 같다면 같은 경우로 본다.
사진관은 손님에게 가능한 모든 경우를 보여 주고 그 가운데 하나를 고르게 하고자 한다. 여섯 장을 고를 수 있는 모든 경우를 사전 순으로 출력하는 프로그램을 작성하여라. 각 경우는 고른 사진의 번호를 오름차순으로 적는다. 사전 순이란 적어 둔 첫 번호가 작은 경우가 앞에 오고, 그 번호가 같다면 두 번째 번호가 작은 경우가 앞에 오는 순서를 말한다.
손님은 여러 명이 차례대로 찾아온다. 손님마다 후보 사진의 장수와 번호가 따로 주어지며, 손님마다 따로 답을 출력한다.
예를 들어 어느 손님이 k=7장의 후보 사진을 가져왔고, 그 번호가 차례대로 14, 24, 26, 28, 29, 32, 36이라고 해보자. 이때 여섯 장을 고르는 경우는 모두 7가지이며, 사전 순으로 나열하면 다음의 표와 같다.
| 경우 | 고른 사진의 번호 |
|---|---|
| 1번 | 14 24 26 28 29 32 |
| 2번 | 14 24 26 28 29 36 |
| 3번 | 14 24 26 28 32 36 |
| 4번 | 14 24 26 29 32 36 |
| 5번 | 14 24 28 29 32 36 |
| 6번 | 14 26 28 29 32 36 |
| 7번 | 24 26 28 29 32 36 |
후보 사진이 일곱 장이면 붙이지 않고 빼는 사진 한 장을 고르는 것과 같으므로 경우가 7가지다. 표의 1번 경우는 36번 사진을 뺀 것이고, 7번 경우는 14번 사진을 뺀 것이다.
만약 k가 6이라면 후보 사진을 모두 붙이는 것이므로 경우는 한 가지뿐이다. 후보 사진이 늘어나면 경우의 수는 다음의 표와 같이 늘어난다.
| 후보 사진의 장수 k | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|
| 고를 수 있는 경우의 수 | 1 | 7 | 28 | 84 | 210 | 462 | 924 | 1,716 |
따라서 한 손님에 대하여 출력하는 줄의 수는 1줄에서 1,716줄 사이이며, 그 뒤에 빈 줄이 한 줄 더 붙는다.
입출력 예시
예시 1
입력
7 14 24 26 28 29 32 36 0
출력
14 24 26 28 29 32 14 24 26 28 29 36 14 24 26 28 32 36 14 24 26 29 32 36 14 24 28 29 32 36 14 26 28 29 32 36 24 26 28 29 32 36
예시 2
입력
6 19 25 32 40 47 49 0
출력
19 25 32 40 47 49
예시 3
입력
6 8 12 29 34 39 43 6 11 21 24 27 30 34 0
출력
8 12 29 34 39 43 11 21 24 27 30 34
입력 조건
입력은 여러 개의 줄로 이루어지며, 각 줄은 한 손님에 대한 정보다. 각 줄에는 가장 먼저 그 손님이 가져온 후보 사진의 장수 k가 주어지고, 이어서 k장의 사진 번호가 공백을 기준으로 구분되어 주어진다. k는 6 이상 13 이하의 자연수이며, 사진 번호는 1 이상 49 이하의 서로 다른 자연수로 오름차순으로 주어진다.
마지막 줄에는 0이 하나 주어진다. 이 줄은 더 이상 손님이 없다는 뜻이므로 답을 출력하지 않는다. 손님은 1명 이상 4명 이하다.
출력 조건
손님마다, 여섯 장을 고를 수 있는 모든 경우를 사전 순으로 한 줄에 하나씩 출력한다. 한 줄에는 고른 여섯 장의 사진 번호를 오름차순으로 적는다.
이때 각 번호 뒤에 공백을 하나 붙여서 출력한다. 그래서 줄의 마지막 번호 뒤에도 공백이 하나 남는다. 또한 한 손님의 결과를 모두 출력한 뒤에 빈 줄을 하나 출력한다. 마지막 손님 뒤에도 빈 줄을 하나 출력한다. 그래서 출력의 마지막 세 글자는 차례대로 공백, 줄바꿈, 줄바꿈이다.
요구사항
- 한 면에는 반드시 여섯 장을 붙입니다
- 같은 사진을 두 번 붙이지 않습니다
- 고른 사진이 같다면 같은 경우로 보므로, 각 경우는 한 번만 출력합니다
- 각 경우의 번호는 오름차순으로 적고, 경우들은 사전 순으로 출력합니다
- 각 번호 뒤에 공백을 하나 붙이므로 줄의 마지막 번호 뒤에도 공백이 하나 남습니다
- 한 손님의 결과를 모두 출력한 뒤에 빈 줄을 하나 출력하며, 마지막 손님 뒤에도 빈 줄이 붙습니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 14개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 14개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 14개를 전부 통과해야 해결입니다.
6 19 25 32 40 47 49 0
19 25 32 40 47 49
6 8 12 29 34 39 43 6 11 21 24 27 30 34 0
8 12 29 34 39 43 11 21 24 27 30 34
7 14 24 26 28 29 32 36 0
14 24 26 28 29 32 14 24 26 28 29 36 14 24 26 28 32 36 14 24 26 29 32 36 14 24 28 29 32 36 14 26 28 29 32 36 24 26 28 29 32 36
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.