Baekjoon/백트래킹
[백준] 6603 로또 (실버2) / 백트래킹
hellosonic
2023. 4. 23. 15:58
문제요약
나의 코드 및 설명
def dfs(n, start, temp_list):
if len(temp_list) == 6: #전달받은 임시 리스트 길이가 6이라면
result.append(temp_list) #추가
return
if n == count:
return
for i in range(start, count):
dfs(n+1, i+1, temp_list + [num_list[i]])
while True:
num_list = list(map(int, input().split()))
if num_list == [0]: #0을 입력받는다면 반복문 탈출
break
count = num_list.pop(0)
result = []
dfs(0,0,[])
for i in result:
print(" ".join(map(str, i)))
print()
피드백
이전에 많이 풀어본 백트래킹 문제와 유사한 문제이다. 백트래킹에서 하위 함수의 변수에 임시 리스트를 지정하고, 조건에 도달했을 때 정답 리스트에 추가하고, 다시 돌아왔을 때 pop해주지 않는 식으로 문제를 해결했는데, 멀티 트리에서 이 방식은 상당히 유용한 것 같다. pop했을 때 얕은 복사로 인한 문제가 발생할 가능성이 있는데, 이렇게 풀면 얕은 복사로 인한 문제를 사전에 방지할 수 있다.