- 여러 가지 선택들 중 한 가지를 선택
- 선택이 이루어지면 새로운 선택지들의 집합이 생성
- 이런 선택을 반복하면서 최종 상태(목표)에 도달
백트래킹을 적용하면 일반적으로 경우의 수가 줄어들지만 최악의 경우 여전히 지수함수 시간을 요구 (DFS와 동일)
# {1, 2, 3} 집합에서 3개의 숫자를 선택하는 기본 예제
# 조건) 이미 사용한 숫자는 사용하지 않도록
arr = [i for i in range(1, 4)]
path = [0] * 3
def backtracking(cnt):
# 기저 조건 : 숫자 3개를 골랐을 때 종료
if cnt == 3:
print(*path)
return
for num in arr:
# 가지치기 - 중복된 숫자 제거
if num in path:
continue
# 들어가기 전 로직
path[cnt] = num
# 다음 재귀 함수 호출
backtracking(cnt + 1)
# 돌아와서 할 로직 : 초기화
path[cnt] = 0