l = ''
while l != [0] :
l = list(map(int, input().split()))
S = l[1:]
sol = []
def DFS(picked, newpick) :
if len(picked) == 5 :
sol.append(picked + [newpick])
for i in S :
if i > newpick :
DFS(picked + [newpick], i)
for x in S :
DFS([], x)
for i in range(len(sol)) :
for j in range(len(sol[i]) - 1) :
print(sol[i][j], end = ' ')
print(sol[i][-1])
print()
|
이미 픽된 리스트 picked와 새로 list에 넣는 숫자 newpick을 함수에 입력했을때
이번에 새로 넣은 숫자 newpick보다 큰 수 i에 대해서 함수 자신을 다시 호출한다.
길이 6의 콤비네이션을 원하므로 picked의 길이가 5라면 마지막으로 하나를 더 넣고 재귀를 마친다.
결과적으로 오름차순으로 정렬된 길이 6의 콤비네이션들이 sol에 담긴다.
이후 양식에 맞게 sol의 각 원소를 출력한다.
인풋으로 0을 넣을때까지 영원히 실행되라고 주어졌으니 마지막으로 코드 전체를 while문 안에 넣었다.
L[0]은 자기 자신의 길이를 표현하니 사실 필요없는 정보라 거르고 L[1:]만 이용했다.
근데 굳이 준걸 보면 저 넘버를 이용해서 뭔가 더 쉽게 푸는 방법이 있을지도 모르겠다.
DFS를 야무지게 이용해서 뿌듯했는데 퀴즈 끝나고 코드리뷰를 하다가 combination이라는 외장함수가 있다는 사실을 알았을때의 말로 표현하기 힘든 배신감...
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 1920 수 찾기 (0) | 2021.11.11 |
---|---|
파이썬 백준 2503 숫자 야구 (0) | 2021.11.11 |
파이썬 백준 1924 2007년 (0) | 2021.11.11 |
파이썬 백준 9205 맥주 마시면서 걸어가기 (0) | 2021.11.10 |
파이썬 백준 17478 재귀함수가 뭔가요? (0) | 2021.11.10 |