코딩 테스트(Coding Test)/알고리즘 개념
깊이 우선 탐색(DFS)
배씌
2024. 5. 20. 11:20
깊이 우선 탐색 (DFS, Depth-First Search)
: 루트 노드(혹은 임의의 노드)에서 시작하여 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법
깊이 우선 탐색(DFS)의 특징
- 자기 자신을 호출하는 순환 알고리즘의 형태
- 전위 순회(Pre-Order Traversals)를 포함한 다른 형태의 트리 순회는 모두 DFS의 한 종류.
- 어떤 노드를 방문했는지 여부를 반드시 검사해야함.
깊이 우선 탐색(DFS)의 과정

1. x노드(시작 노드)를 방문.
- 방문한 노드를 표시
2. x노드와 인접한 노드 중 방문하지 않은 노드 차례대로 순회.
- if) 인접한 노드가 없다면 -> 종료
3. 방문하지 않은 노드가 없다면, 이전 정점으로 역추적(backtracking).
4. 모든 노드를 방문할 때 까지 반복.
깊이 우선 탐색(DFS)의 구현
- Stack 활용
1. 임의의 노드에서 시작하여 방문한 것으로 표시하고, 스택에 push
2. 스택에서 맨 위의 노드를 가져옴.
3. 방문하지 않은 인접 노드를 방문 및 표시하고, 스택에 push
4. 스택이 비워질 때까지 반복.