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했을 때 얕은 복사로 인한 문제가 발생할 가능성이 있는데, 이렇게 풀면 얕은 복사로 인한 문제를 사전에 방지할 수 있다.