DFS / BFS

원코 ㅣ 2024. 4. 12. 17:06

탐색(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는 스택 자료구조(혹은 재귀 함수)를 이용한다.

동작 과정

  1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.
  2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 하나라도 있다면, 그 노드를 스택에 넣고 방문 처리한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
  3. 더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다.

BFS (Breadth-First Search)

  • 너비 우선 탐색. 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘이다.
  • BFS는 큐 자료구조를 이용한다.

동작 과정

  1. 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다.
  2. 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리한다.
  3. 더 이상 2번의 과정을 수행할 수 없을 때까지 반복한다.

'알고리즘' 카테고리의 다른 글

이진 탐색  (0) 2024.04.12
퀵 정렬, 계수 정렬  (0) 2024.04.12
선택 정렬, 삽입 정렬  (0) 2024.04.12
구현 유형  (0) 2024.04.12
그리디 알고리즘  (0) 2024.04.12