DFS:
→ “쭉쭉 들어가! 갈 수 있을 때까지 한 방향으로 끝까지 가!”
→ 막다른 길이면 돌아가서 다른 길을 찾아봐.
BFS:
→ “일단 한 칸씩 다 살펴보고, 다음 레벨로 넘어가.”
→ 갈 수 있는 길은 넓게 펼쳐서 먼저 다 본 다음에, 그 다음 단계로 넘어가.
아래와 같은 연결 구조가 있다고 해봅시다:
A
├── B
│ ├── D
│ └── E
└── C
└── F
이걸 파이썬 딕셔너리로 표현하면:
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': [],
'F': []
}
1. A 방문 → [A]
2. B 방문 → [A, B]
3. D 방문 → [A, B, D] (D는 끝)
4. E 방문 → [A, B, D, E] (E도 끝)
5. C 방문 → [A, B, D, E, C]
6. F 방문 → [A, B, D, E, C, F]
DFS 방문 순서 → A → B → D → E → C → F
1. A 방문 → [A]
2. B, C 방문 → [A, B, C]
3. D, E (B의 자식) 방문 → [A, B, C, D, E]
4. F (C의 자식) 방문 → [A, B, C, D, E, F]
BFS 방문 순서 → A → B → C → D → E → F
| 구분 | DFS (깊이 우선) | BFS (너비 우선) |
|---|---|---|
| 구조 | 스택 | 큐 |
| 순서 | 깊이 우선 | 레벨(깊이) 우선 |
| 속도 | 목표가 깊은 곳에 있으면 빠름 | 목표가 가까운 곳에 있으면 빠름 |
| 구현 | 재귀 or 스택 | 큐 |
stack, BFS: queue필요하다면 시각적으로 애니메이션처럼 흐름을 그림으로 보여드릴 수도 있어요.
원하시면 시각 자료도 만들어 드릴게요! 😊
계속 이어서 연습해볼까요?