입력 | 출력 |
---|---|
7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0 | 1 2 3 4 5 6 1 2 3 4 5 7 1 2 3 4 6 7 1 2 3 5 6 7 1 2 4 5 6 7 1 3 4 5 6 7 2 3 4 5 6 7 1 2 3 5 8 13 1 2 3 5 8 21 1 2 3 5 8 34 1 2 3 5 13 21 1 2 3 5 13 34 1 2 3 5 21 34 1 2 3 8 13 21 1 2 3 8 13 34 1 2 3 8 21 34 1 2 3 13 21 34 1 2 5 8 13 21 1 2 5 8 13 34 1 2 5 8 21 34 1 2 5 13 21 34 1 2 8 13 21 34 1 3 5 8 13 21 1 3 5 8 13 34 1 3 5 8 21 34 1 3 5 13 21 34 1 3 8 13 21 34 1 5 8 13 21 34 2 3 5 8 13 21 2 3 5 8 13 34 2 3 5 8 21 34 2 3 5 13 21 34 2 3 8 13 21 34 2 5 8 13 21 34 3 5 8 13 21 34 |
: combinations 이용
재귀 및 백트래킹으로 풀 수 있다.
def dfs(idx, cnt):
if cnt == 6: # 6개를 다 선택했으면 출력
print(*lotto)
return # 이전으로 돌아가
for i in range(idx, len(nums)): # 해당 인덱스부터 마지막까지
lotto[cnt] = nums[i] # 할당하고
dfs(i+1, cnt+1) # 깊이있게 탐색
while True:
nums = list(map(int, input().split()))
if nums[0] == 0:
break
k = nums[0]
del nums[0]
lotto = [0]*k
dfs(0, 0) # 시작 인덱스와 카운트(깊이)
print()
끝까지 갔다가 끝에서부터 돌아온다.