티스토리 뷰
1. DFS
개념: 깊이 우선 탐색으로 깊은 부분을 우선적으로 탐색하는 알고리즘이다.
구현: DFS는 스택 자료구조 혹은 재귀 함수를 이용한다.
동작:
- 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.
- 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문 처리한다.
방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
- 2번의 과정을 수행할 수 없을 때까지 반복한다.
2. BFS
개념: 너비 우선 탐색이며 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘이다.
구현: BFS는 큐 자료구조를 사용한다.
동작:
- 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다.
- 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리한다.
- 더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다.
3. 예제
- 예제1) 음료수 얼려먹기: 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 문제
아이디어:
1) 특정한 지점의 상, 하, 좌, 우를 살펴본 뒤에 주변 지점 중에서 값이 '0'이면서 아직 방문하지 않은 지점이 있다면 해당 지점을 방문
2) 방문한 지점에서 다시 상, 하, 좌, 우를 살펴보며서 방문을 진행하는 과정을 반복하면, 연결된 모든 지점을 방문
3) 모든 노드에 대하여 1~2번 과정을 반복하여 방문하지 않은 지점의 수를 카운트
- 예제2) 미로 탈출: 괴물을 피해 탈출하는 최소 칸의 개수를 구해라
아이디어:
1) BFS를 이용해서 시작 지점에서 가까운 노드부터 차례대로 그래프의 모든 노드를 탐색한다.
2) 상, 하, 좌, 우로 연결된 모든 노드로의 거리가 1로 동일하여 모든 노드의 최단 거리 값을 기록하면 해결할 수 있다.
'Algorithm > Algorithm with Python' 카테고리의 다른 글
[Algorithm] 6. 이진 탐색 알고리즘 (0) | 2025.05.08 |
---|---|
[Algorithm] 5. 다이나믹 프로그래밍 (0) | 2025.05.06 |
[Algorithm] 3. 그래프 탐색 알고리즘: DFS/BFS 배경지식 (1) | 2025.05.06 |
[Algorithm] 2. 구현(시뮬레이션, 완전탐색) (0) | 2025.05.06 |
[Algorithm] 1. 그리디 (1) | 2025.05.06 |