로그인가입

원두 시음 순서

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

문제

어느 카페에는 1번부터 N번까지 번호가 붙은 N가지의 원두가 있다. 바리스타는 이 가운데 M가지를 골라서 한 잔씩 차례대로 내려 맛을 본다. 한 번 고른 원두는 다시 고르지 않으므로, 한 번의 시음에서 같은 번호의 원두가 두 번 나오는 일은 없다.

시음 기록에는 어떤 원두를 몇 번째 잔으로 마셨는지가 그대로 남는다. 따라서 고른 원두가 같아도 마신 차례가 다르면 서로 다른 기록으로 본다.

가능한 모든 시음 기록을 사전 순으로 출력하는 프로그램을 작성하여라. 사전 순이란 첫 잔으로 마신 원두의 번호가 작은 기록이 앞에 오고, 그 번호가 같다면 둘째 잔으로 마신 원두의 번호가 작은 기록이 앞에 오는 순서를 말한다.

예를 들어 N=3가지의 원두 가운데 M=2가지를 골라 마신다고 해보자. 이때 가능한 시음 기록은 모두 6가지이며, 사전 순으로 나열하면 다음의 표와 같다.

기록첫 잔둘째 잔
1번12
2번13
3번21
4번23
5번31
6번32

표의 3번 기록과 1번 기록을 견주어 보자. 마신 원두는 1번과 2번으로 같지만 마신 차례가 서로 바뀌었으므로 다른 기록이다. 그래서 두 기록이 모두 표에 들어 있다.

원두가 한 가지 늘어나면 기록도 늘어난다. 같은 M=2에서 N=4라면 가능한 기록은 다음의 표와 같이 12가지가 된다.

기록첫 잔둘째 잔
1번12
2번13
3번14
4번21
5번23
6번24
7번31
8번32
9번34
10번41
11번42
12번43

기록의 수는 다음과 같이 셀 수 있다. 첫 잔으로 고를 수 있는 원두가 N가지이고, 둘째 잔으로는 이미 마신 하나를 뺀 N-1가지이며, 그 다음 잔은 N-2가지다. 이렇게 M번째 잔까지 곱하면 기록의 수가 된다. 그래서 N=4이고 M=2이면 4와 3을 곱한 12가지가 나온다.

같은 N=3에서 M=1이라면 한 잔만 마시는 것이므로 가능한 기록은 1, 2, 3의 세 가지다. 반대로 M=3이라면 세 가지 원두를 모두 마시는 것이므로 가능한 기록은 다시 6가지가 된다.

입출력 예시

예시 1

입력

3 2

출력

1 2 
1 3 
2 1 
2 3 
3 1 
3 2 

예시 2

입력

1 1

출력

1 

예시 3

입력

2 2

출력

1 2 
2 1 

입력 조건

  • 가장 먼저 카페에 있는 원두의 가지 수 N이 자연수로 주어진다. N은 1 이상 8 이하의 자연수다.

  • 이어서 같은 줄에 골라서 마실 잔의 수 M이 공백을 기준으로 구분되어 주어진다. M은 1 이상 8 이하의 자연수이며, 원두의 가지 수인 N보다 크지 않다.

  • 따라서 입력은 한 줄이며, 그 줄에는 자연수 두 개가 공백 하나로 구분되어 들어 있다.

출력 조건

  • 가능한 모든 시음 기록을 사전 순으로 한 줄에 하나씩 출력한다. 한 줄에는 M개의 원두 번호를 마신 차례대로 적는다.

  • 이때 각 번호 뒤에 공백을 하나 붙여서 출력한다. 그래서 줄의 마지막 번호 뒤에도 공백이 하나 남는다. 또한 모든 기록을 출력한 뒤에 빈 줄이 하나 더 붙는다. 그래서 출력의 마지막 세 글자는 차례대로 공백, 줄바꿈, 줄바꿈이다.

요구사항

  • 한 번 고른 원두는 다시 고르지 않습니다
  • 고른 원두가 같아도 마신 차례가 다르면 다른 기록입니다
  • 기록은 사전 순으로 출력합니다
  • 각 번호 뒤에 공백을 하나 붙이므로 줄의 마지막 번호 뒤에도 공백이 하나 남습니다
  • 모든 기록을 출력한 뒤에 빈 줄을 하나 더 출력합니다
  • 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
  • 쓸 수 있는 말은 파이썬, 자바스크립트입니다
  • 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
  • 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
  • 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
  • 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
  • 케이스는 15개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
  • 케이스 15개를 전부 통과해야 해결입니다.
문제의 요구 사항을 잘 읽고 해결해 주세요. 단, 채점 과정을 건드려 통과한 것처럼 꾸미는 경우 적발 시 제재될 수 있습니다. 제출한 코드는 순위표에 함께 공개됩니다.

예시

공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 15개를 전부 통과해야 해결입니다.

입력
기대 출력
1 1
1
2 2
1 2
2 1
3 2
1 2
1 3
2 1
2 3
3 1
3 2

풀이

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

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

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

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

이 문제를 푼 사람

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