백트래킹(Backtracking)은 완전 탐색의 한 종류로, 문제의 해를 찾는 도중에 현재 선택한 경로가 해가 아니라고 판단되면 다시 이전 단계로 돌아가서 다른 경로를 시도하는 방법입니다. 즉, 가능성 있는 모든 후보를 검사하다가, 더 이상 해를 찾을 가능성이 없는 경우 이전 단계로 돌아와서 다른 후보를 시도합니다.
백트래킹의 주요 특징:
파이썬 코드를 통해 백트래킹을 예시로 살펴보겠습니다. 다음은 1부터 N까지의 자연수 중에서 K개를 선택하는 조합을 백트래킹으로 구하는 코드입니다.
def backtrack(n, k, start, comb, result):
if len(comb) == k: # 조합의 길이가 K이면 결과에 추가
result.append(comb[:])
return
for i in range(start, n + 1):
comb.append(i)
backtrack(n, k, i + 1, comb, result) # 다음 자연수로 이동
comb.pop() # 백트래킹: 마지막 선택 취소
def backtracking_combinations(n, k):
result = []
backtrack(n, k, 1, [], result)
return result
N = 5 # 1부터 N까지의 자연수 중
K = 3 # 3개를 선택하는 조합을 구함
combinations = backtracking_combinations(N, K)
print("조합 개수:", len(combinations))
for comb in combinations:
print(comb)
이 코드는 백트래킹을 사용하여 1부터 N까지의 자연수 중에서 K개를 선택하는 모든 조합을 구하고 출력합니다. 선택한 후보를 추가하고 재귀적으로 다음 단계를 호출하며, 조합의 길이가 K가 될 때 결과에 추가하고 백트래킹을 수행합니다.