백트래킹

백트래킹 (Back Tracking)

 

 

1)  백트래킹란?

백트래킹은 모든 경우의 수를 탐색하되,
조건을 만족하지 않는 경우 탐색을 중단하고 이전 단계로 되돌아가는 방식의 탐색 알고리즘이다.

DFS 기반의 완전 탐색 기법 중 하나로, 불필요한 탐색을 줄여주는 가지치기(pruning) 기법이 포함된다.

 

 

 

 

2)  백트래킹 동작원리

 

1. 가능한 모든 경우를 시도한다 (DFS 기반 탐색).

2. 탐색 도중 조건에 맞지 않는 경우 더 이상 진행하지 않고 되돌아간다 (backtrack).

3. 조건을 만족하는 경우 정답 처리한다.

4. 다음 탐색을 위해 상태를 복구하고(undo), 새로운 경우의 수를 시도한다.

 

 

// 백트래킹 구조

void backtrack(int depth) {
    if (종료 조건) {
        정답 처리;
        return;
    }

    for (int i = 선택 범위) {
        if (유망하지 않으면 continue); // 가지치기
        상태 저장;
        backtrack(depth + 1);
        상태 복구; // 백트래킹
    }
}

 

 

 

3)  사용 조건

 

1. 모든 경우의 수를 탐색해야 하는 문제

2. 단, 중간에 불필요한 탐색을 줄일 조건이 존재할 때 유리함

 

 

 

 

4)  시간 복잡도

 

모든 경우 탐색일 때, 최대 O(2ⁿ) ~ O(n!) 까지 발생할 수 있음
하지만 조건이 강하면 가지치기로 탐색 공간이 급감할 수 있음

 

 

 

 

 

5)  특징

 

항목  내용
기반 알고리즘 DFS (재귀적 구조)
핵심 개념 상태 저장 → 탐색 → 조건 불만족 시 복귀 (Undo)
장점 완전탐색보다 빠르다 (가지치기)
단점 조건이 없거나 가지치기를 못하면 완전탐색과 같음
사용 자료구조 배열, visited 배열, 재귀 함수

 

 

 

 

 

 

 

 

 

 

관련 문제

https://devwarriorjungi.tistory.com/entry/%EB%B0%B1%EC%A4%80-9663-Java-N-Queen

 

[백준 9663] Java - N-Queen

https://www.acmicpc.net/problem/9663 N-Queen 1) 문제N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성

devwarriorjungi.tistory.com

 

 

 

 

'Algorithm > 이론' 카테고리의 다른 글

시뮬레이션 (Simulation)  (0) 2025.05.22
순열 / 조합 / 부분집합  (0) 2025.05.02
재귀함수 (Recursion)  (0) 2025.05.02
DFS 깊이 우선 탐색 (스택 방식)  (0) 2025.05.01
DFS 깊이 우선 탐색 (재귀방식)  (0) 2025.05.01