백트래킹이란?
백트래킹(backtracking) 은 가능한 답을 하나씩 만들어 가다가, 더 진행해도
답이 될 수 없다고 판단되면 즉시 되돌아와(back-track) 다른 선택을 시도하는
탐색 기법입니다. 한마디로 가지치기(pruning)가 들어간 완전 탐색입니다.
미로에서 막다른 길을 만나면 마지막 갈림길로 돌아가 다른 길을 택하는 것과
같습니다.
1. 완전 탐색과 무엇이 다른가
순수 완전 탐색은 모든 후보를 끝까지 다 만들어 봅니다. 백트래킹은 만드는 도중에
"이 선택은 규칙을 어긴다"고 알면 그 가지를 통째로 잘라 냅니다.
N-Queen: 같은 열/대각선에 퀸이 있으면 더 놓아 볼 필요 없이 되돌아간다.
이 가지치기 덕분에 이론상 \(N!\)인 탐색이 실제로는 훨씬 적은 경우만 보고 끝납니다.
2. 백트래킹의 3요소
모든 백트래킹은 다음 세 가지로 구성됩니다.
- 선택(choice): 현재 단계에서 시도할 수 있는 후보들.
- 제약(constraint): 만족해야 하는 규칙 — 어기면 가지치기.
- 목표(goal): 답이 완성되는 조건 — 도달하면 기록.
재귀로 한 단계 내려가며 선택하고, 막히면 선택을 취소(되돌리기)하고 다음 후보를
시도합니다.
3. 상태 공간 트리
백트래킹은 상태 공간 트리를 깊이 우선으로 탐색하는 것과 같습니다.
(시작)
/ | \
선택A 선택B 선택C
/ \ (제약 위반 → 가지치기)
... ...
각 노드는 "부분적으로 만들어진 답"이고, 잎(leaf)에 도달하면 완성된 답입니다.
중간에 제약을 어기는 노드는 그 아래를 통째로 자릅니다.
4. 대표 문제들
| 문제 | 선택 | 제약 |
|---|---|---|
| N-Queen | 각 행에 퀸의 열 | 같은 열·대각선 금지 |
| 순열/조합 | 다음에 고를 원소 | 이미 고른 것 제외 |
| 부분집합 합 | 각 원소 포함 여부 | 합이 목표 초과 금지 |
| 스도쿠 | 빈 칸의 숫자 | 행·열·박스 중복 금지 |
5. 가지치기가 전부다
백트래킹의 성능은 얼마나 빨리, 많이 가지치기하느냐로 결정됩니다. 좋은
가지치기 아이디어:
- 제약 위반 즉시 중단 — 규칙을 어기는 순간 되돌아간다.
- 하한/상한 추정 — "남은 걸 다 더해도 목표에 못 미친다"면 포기.
- 유망성 판단 — 현재까지의 부분 답이 최선의 답을 갱신할 가능성이 없으면 중단.
가지치기 없는 백트래킹은 그냥 느린 완전 탐색입니다.
정리
백트래킹 = 완전 탐색 + 되돌리기 + 가지치기. 선택·제약·목표를 정의하고, 재귀로
내려가며 막히면 되돌아옵니다. 다음 강의에서 표준 구현 골격과 N-Queen, 순열
생성을 코드로 만듭니다.