로그인가입

등대 점등 순서

200점케이스 8출제 dongbinna
10월 30일에 올라온 문제입니다.

문제

해안선을 따라 1번부터 N번까지 번호가 붙은 N개의 등대가 세워져 있다. 관리소는 밤마다 N개의 등대를 모두 한 번씩 켜는데, 발전기 용량 때문에 한 번에 하나씩만 켤 수 있다. 그래서 어느 등대를 몇 번째로 켤지를 미리 정해 두어야 한다.

모든 등대를 한 번씩 켜는 차례는 여러 가지가 있다. 관리소는 가능한 모든 차례를 빠짐없이 적어서 점등 계획표를 만들고자 한다.

N개의 등대를 모두 한 번씩 켜는 모든 차례를 사전 순으로 출력하는 프로그램을 작성하여라. 사전 순이란 먼저 켜는 등대의 번호가 작은 차례가 앞에 오고, 그 번호가 같다면 그 다음에 켜는 등대의 번호가 작은 차례가 앞에 오는 순서를 말한다.

예를 들어 N=3이라고 해보자. 이때 가능한 점등 차례는 모두 6가지이며, 사전 순으로 나열하면 다음의 표와 같다.

계획첫 번째로 켜는 등대두 번째로 켜는 등대세 번째로 켜는 등대
1번123
2번132
3번213
4번231
5번312
6번321

표의 3번 계획과 1번 계획을 견주어 보자. 켜는 등대는 세 개 모두 같지만 켜는 차례가 다르므로 서로 다른 계획이다. 그래서 두 계획이 모두 표에 들어 있다.

N=4라면 차례는 24가지가 된다. 그 가운데 앞에서부터 일곱 가지만 적어 보면 다음의 표와 같다.

계획첫 번째로 켜는 등대두 번째로 켜는 등대세 번째로 켜는 등대네 번째로 켜는 등대
1번1234
2번1243
3번1324
4번1342
5번1423
6번1432
7번2134

먼저 켜는 등대가 1번인 계획을 모두 적고 나서야 2번으로 시작하는 계획이 나온다. 이렇게 이어 가면 마지막 24번 계획은 4, 3, 2, 1이 된다.

N이 커지면 차례의 수도 빠르게 늘어난다. 각 N에 대한 차례의 수는 다음의 표와 같다.

N12345678
가능한 차례의 수126241207205,04040,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

풀이

코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.

0자1줄메모리 256MB (적어만 둡니다)기준 38ms

제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.

공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.

이 문제를 푼 사람

아직 없습니다. 첫 번째가 되실 수 있습니다.