728x90
문제
현재 윷놀이 판에 말이 A, B, C, D로 총 4개 존재한다. 10번 윷을 던져 나온 결과를 미리 알고 있다. 결과는 도, 개, 걸, 윷, 모로 1, 2, 3, 4, 5 칸 이동하게 된다. 각각의 결과를 말 4개에 적절히 분배할 것이다. 분배한 결과를 적을때 편의상 말의 번호를 알파벳 대신 숫자로 표현한다. 다시 말해, A는 1, B는 2, C는 3, D는 4 로 바꿔적는다.
재귀호출을 이용하여 윷을 분배하는 모든 경우의 수를 확인함으로써 문제를 해결하시오. 즉, 1 1 1 1 1 1 1 1 1 1 부터 4 4 4 4 4 4 4 4 4 4 까지 모든 경우를 재귀호출을 활용하여 나열하고, 그 중 K번째 경우를 출력하는 프로그램을 작성하시오.
입력
첫 번째 줄에 자연수 K가 주어진다. (1 ≤ K ≤ 1,048,576)
출력
한 줄에 K번째 경우에 대해 출력한다. 각 숫자의 사이에는 공백이 들어간다.
입력 예시 1
1
출력 예시 1
1 1 1 1 1 1 1 1 1 1
입력 예시 2
16
출력 예시 2
1 1 1 1 1 1 1 1 4 4
입력 예시 3
438284
출력 예시 3
2 3 3 4 1 1 1 1 3 4
#코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import sys
def getResult(x):
global result, cur_cnt, K, flag
if flag: return
if x >= len(result):
cur_cnt += 1
if cur_cnt >= K:
flag = True
print(*result)
return
else:
for i in range(1, 5):
result[x] = i
getResult(x+1)
if __name__ == "__main__":
input = sys.stdin.readline
result = [0] * 10
cur_cnt = 0
flag = False
K = int(input())
getResult(0)
|
cs |
반응형