자바스크립트 정리

자료구조 & 알고리즘 (백트래킹)

알럽유 2023. 7. 20. 10:56
728x90
반응형

백트래킹이란?

▶ 모든 경우의 수를 탐색하는 알고리즘

▶ DFS나 BFS를 이용할 수 있다.

▶ 효율을 위해 탐색하지 않아도 되는 곳을 미리 막는 것을 가지치기(Pruning)라고 한다.

▶ 자바스크립트는 재귀 효율이 나쁘기 때문에 DFS를 구현할 경우 스택을 이용하는 것이 좋다.

    ▶코딩 테스트에선 이를 고려하여 재귀로 작성해도 풀 수 있도록 문제를 제출하는 경우도 있다.

▶ 탐색에서 순환(Cycle)이 발생할 수 있다면 BFS를 이용하는 것이 편하다.

BFS, DFS

모든 경우의 수를 찾을 때도 사용한다.

백트래킹의 핵심은 가지치기

가지치기를 얼마나 잘하느냐가 효율성을 결정한다.

어떻게 작성할 것인가

▶ 우선 모든 경우의 수를 찾을 수 있도록 코딩

▶ 이후 문제에서 특정한 조건을 만족하는 것만 탐색하고 나머지는 탐색하지 않도록 조건문을 작성한다.

▶ 즉, 절대로 답이 될 수 없는 것은 탐색을 종료한다. 

N-Queue 문제

길이가 N인 체스판 위에 N개의 퀸이 서로를 공격할 수 없도록 배치할 수 있는 경우의 수는?

백트래킹은 모든 경우의 수를 찾아야 하기에 일단 하고 본다.

1 , 1에 퀸을 배치

 

첫 줄은 더이상 퀸을 둘 수 없기에 다음 줄로 이동

 

두 번째 줄 첫 칸은 둘 수 없기에 패스

 

두 번째 줄 두 번째 칸은 둘 수 없기에 패스

 

두 번째 줄 세 번째 칸은 퀸 배치가 가능하다.

 

세 번째 줄에서 더 이상 퀸을 둘 수 없어서 이후 탐색은 제외한다.

 

이번엔 1, 2에 둬본다.

 

안되는 곳은 패스하고 되는 곳에 둔다.

 

세 번째 줄에서도 안되는 곳은 패스하고 되는 곳에 둔다.

 

결과적으로 N개의 퀸을 배치할 수 있는 경우의 수를 찾았다.