등대 점등 순서
문제
해안선을 따라 1번부터 N번까지 번호가 붙은 N개의 등대가 세워져 있다. 관리소는 밤마다 N개의 등대를 모두 한 번씩 켜는데, 발전기 용량 때문에 한 번에 하나씩만 켤 수 있다. 그래서 어느 등대를 몇 번째로 켤지를 미리 정해 두어야 한다.
모든 등대를 한 번씩 켜는 차례는 여러 가지가 있다. 관리소는 가능한 모든 차례를 빠짐없이 적어서 점등 계획표를 만들고자 한다.
N개의 등대를 모두 한 번씩 켜는 모든 차례를 사전 순으로 출력하는 프로그램을 작성하여라. 사전 순이란 먼저 켜는 등대의 번호가 작은 차례가 앞에 오고, 그 번호가 같다면 그 다음에 켜는 등대의 번호가 작은 차례가 앞에 오는 순서를 말한다.
예를 들어 N=3이라고 해보자. 이때 가능한 점등 차례는 모두 6가지이며, 사전 순으로 나열하면 다음의 표와 같다.
| 계획 | 첫 번째로 켜는 등대 | 두 번째로 켜는 등대 | 세 번째로 켜는 등대 |
|---|---|---|---|
| 1번 | 1 | 2 | 3 |
| 2번 | 1 | 3 | 2 |
| 3번 | 2 | 1 | 3 |
| 4번 | 2 | 3 | 1 |
| 5번 | 3 | 1 | 2 |
| 6번 | 3 | 2 | 1 |
표의 3번 계획과 1번 계획을 견주어 보자. 켜는 등대는 세 개 모두 같지만 켜는 차례가 다르므로 서로 다른 계획이다. 그래서 두 계획이 모두 표에 들어 있다.
N=4라면 차례는 24가지가 된다. 그 가운데 앞에서부터 일곱 가지만 적어 보면 다음의 표와 같다.
| 계획 | 첫 번째로 켜는 등대 | 두 번째로 켜는 등대 | 세 번째로 켜는 등대 | 네 번째로 켜는 등대 |
|---|---|---|---|---|
| 1번 | 1 | 2 | 3 | 4 |
| 2번 | 1 | 2 | 4 | 3 |
| 3번 | 1 | 3 | 2 | 4 |
| 4번 | 1 | 3 | 4 | 2 |
| 5번 | 1 | 4 | 2 | 3 |
| 6번 | 1 | 4 | 3 | 2 |
| 7번 | 2 | 1 | 3 | 4 |
먼저 켜는 등대가 1번인 계획을 모두 적고 나서야 2번으로 시작하는 계획이 나온다. 이렇게 이어 가면 마지막 24번 계획은 4, 3, 2, 1이 된다.
N이 커지면 차례의 수도 빠르게 늘어난다. 각 N에 대한 차례의 수는 다음의 표와 같다.
| N | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 가능한 차례의 수 | 1 | 2 | 6 | 24 | 120 | 720 | 5,040 | 40,320 |
입출력 예시
예시 1
입력
3
출력
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
예시 2
입력
1
출력
1
예시 3
입력
2
출력
1 2 2 1
입력 조건
가장 먼저 해안선에 세워져 있는 등대의 수 N이 자연수로 주어진다. N은 1 이상 8 이하의 자연수다.
입력은 이 한 줄로 끝나며, 그 줄에는 N이 하나만 들어 있다. 등대의 번호는 1번부터 N번까지로 정해져 있으므로 번호가 따로 주어지지는 않는다. N이 8이면 가능한 차례가 40,320가지이므로 출력하는 줄의 수도 그만큼 늘어난다.
출력 조건
N개의 등대를 모두 한 번씩 켜는 모든 차례를 사전 순으로 한 줄에 하나씩 출력한다. 한 줄에는 N개의 등대 번호를 켜는 차례대로 적는다.
이때 각 번호 뒤에 공백을 하나 붙여서 출력한다. 그래서 줄의 마지막 번호 뒤에도 공백이 하나 남는다. 또한 모든 차례를 출력한 뒤에 빈 줄이 하나 더 붙는다. 그래서 출력의 마지막 세 글자는 차례대로 공백, 줄바꿈, 줄바꿈이다.
요구사항
- 모든 등대를 빠짐없이 한 번씩 켭니다
- 차례는 사전 순으로 출력합니다
- 각 번호 뒤에 공백을 하나 붙이므로 줄의 마지막 번호 뒤에도 공백이 하나 남습니다
- 모든 차례를 출력한 뒤에 빈 줄을 하나 더 출력합니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 8개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 8개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 8개를 전부 통과해야 해결입니다.
1
1
2
1 2 2 1
3
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.