탐색(Search)이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 말한다. 대표적인 그래프 탐색 탐색 알고리즘이 바로 오늘 다룰 DFS, BFS이다. 이 둘은 코딩 테스트에서 매우 자주 등장하는 유형이므로, 반드시 숙지하는 것이 좋다.
이러한 알고리즘들을 사용하기 위해서는, 우선 몇 가지 자료구조를 알아야 한다.
선행되는 자료구조
스택 (Stack)
- 먼저 들어온 데이터가 나중에 나가는 형식(선입후출, First-In-Last-Out, FILO)의 자료구조
- 입구와 출구가 동일한 형태로 스택을 시각화할 수 있다. (예: 프링글스 통)
큐 (Queue)
- 먼저 들어온 데이터가 먼저 나가는 형식(선입선출, First-In-First-Out, FIFO)의 자료구조
- 큐는 입구와 출구가 모두 뚫려 있는 형태로 시각화할 수 있다. (예: 터널)
선행되는 함수 형식
재귀 함수 (Recursive Function)
- 자기 자신을 다시 호출하는 함수
def recursive_function():
print('call recursive function)
recursive_function()
- 재귀 함수를 문제 풀이에서 사용할 경우, 재귀 함수의 종료 조건을 반드시 명시하여야 한다. 만약 그렇지 않으면, 함수가 무한히 호출될 수 있다.
DFS / BFS
DFS (Depth-First Search)
- 깊이 우선 탐색. 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다.
- DFS는 스택 자료구조(혹은 재귀 함수)를 이용한다.
동작 과정
- 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.
- 스택의 최상단 노드에 방문하지 않은 인접 노드가 하나라도 있다면, 그 노드를 스택에 넣고 방문 처리한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
- 더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다.
BFS (Breadth-First Search)
- 너비 우선 탐색. 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘이다.
- BFS는 큐 자료구조를 이용한다.
동작 과정
- 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다.
- 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리한다.
- 더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다.
'알고리즘' 카테고리의 다른 글
이진 탐색 (0) | 2024.04.12 |
---|---|
퀵 정렬, 계수 정렬 (0) | 2024.04.12 |
선택 정렬, 삽입 정렬 (0) | 2024.04.12 |
구현 유형 (0) | 2024.04.12 |
그리디 알고리즘 (0) | 2024.04.12 |