카테고리 없음

[백준/BOJ] - 11974번 python 풀이 - 백트래킹

반오십 코린이 2023. 5. 4. 13:37
728x90


n = int(input())
temp = []

def dfs():
    if len(temp) == n:
        print(*temp)
        return
    for i in range(1,n+1): # 1~n
        if i not in temp:
            temp.append(i)
            dfs()
            temp.pop()
dfs()

dfs를 활용한 백트래킹 기법을 활용한 문제.

temp의 길이가 n일 경우 출력하기 때문에 출력하고 return 하게끔 구현한다.

재귀함수에서 temp에 i값이 존재하는지 확인하며 없을 경우 추가하고

재귀함수로 들어간다.

dfs() 줄 다음의 temp.pop()에 도달하는 경우는 이미 출력을 끝냈다는 의미이므로

맨 끝 값을 제거하고 해당 재귀 함수에서 반복문을 더이상 진행할 수 없을 경우 재귀함수 종료가 되어

이 전의 재귀함수로 돌아간다. 앞서 언급했던 내용의 반복을 통해 값이 겹치치 않는 집합을 얻을 수 있다.

 

728x90