본문 바로가기
코딩테스트준비/알고리즘

백트래킹 알고리즘(BackTracking)

by xladmt 2024. 1. 12.

백트래킹 알고리즘이란?

해를 찾는 도중 해가 아니어서 막히게 되면, 되돌아가서 다시 해를 찾아가는 기법을 말한다. 백트래킹은 한정 조건을 가진 문제를 풀려는 전략이다. 어떤 문제를 푸는데 있어 모든 경우의 수를 시도하여 문제의 정답을 찾아나간다. 하지만 원하는 값과 불일치하는 부분이 발생하면 더 이상 탐색을 진행하지 않고 전 단계로 돌아가는 것에 있어 모든 경우의 수를 탐색하는  DFS와 차이가 있다.

백트래킹 과정

 

 백트래킹 특징

- 해를 찾아가는 도중, 지금의 경로가 해가 될 것 같지 않으면 더 이상 가지 않고 되돌아 가기 때문에 반복문의 횟수까지 줄일 수 있어 효율적이다.

-이를 가지치기라고 하는데, 불필요한 부분을 쳐내고 최대한 올바른 쪽으로 간다는 의미다.

- 하지만 N!의 경우의 수를 가진 문제에서 최악의 경우에는 여전히 지수함수 시간을 필요로 하므로 처리가 불가능 할 수도 있다. 가지치기를 얼마나 잘하느냐에 따라 효율성이 결정되게 된다.

- 주로 문제 풀이에서 DFS 등으로 모든 경우의 수를 탐색하는 과정에서, 조건문 등을 걸어 답이 될 수 없는 상황을 정의하고, 그러한 상황일 경우 탐색을 중지시킨 뒤 그 이전으로 되돌아가서 다른 경우를 탐색하게 된다.

 

백준 예시 문제

15649 ~ 15666 N과M(1) ~ N과 M(12) https://www.acmicpc.net/problem/15649
9663 N-Queen https://www.acmicpc.net/problem/9663
15686 치킨 배달 https://www.acmicpc.net/problem/15686
1182 부분수열의 합 https://www.acmicpc.net/problem/1182
1759 암호 만들기 https://www.acmicpc.net/problem/1759
6603 로또 https://www.acmicpc.net/problem/6603
1941 소문난 칠공주 https://www.acmicpc.net/problem/1941

 

 

[참고]

https://www.youtube.com/watch?v=exwk905In0U&list=PLodgw23vNd_UFQeV8GQtVHrT38VWE6iJv

https://hcr3066.tistory.com/27

 

알고리즘 기법[전체 탐색] - 백트래킹(Backtracking)

백트래킹(Backtracking) 비선형으로 구성된 자료 구조를 깊이 우선으로 탐색할 때, 더 이상 나아갈 수 없는 상황에서 그 이전 단계로 복귀하는 과정을 말한다. -일반적으로 최적화 문제를 해결할 때

hcr3066.tistory.com

https://veggie-garden.tistory.com/24

 

[Python] 백트래킹 (+ DFS와 차이)

백트래킹이란? 백트래킹이란 현재 상태에서 가능한 모든 경로를 따라 들어가 탐색하다, 원하는 값과 불일치하는 부분이 발생하면 더 이상 탐색을 진행하지 않고 전 단계로 돌아가는, 즉 이름 그

veggie-garden.tistory.com

https://80000coding.oopy.io/85650ea5-e541-4b12-9b86-a958a99b7533

 

백트래킹(BackTracking)

백트래킹 이란?

80000coding.oopy.io