DSData StructuresPython learning path
0 / 12 완료
LESSON 08

그래프 탐색

관계로 연결된 데이터를 빠짐없이 방문하는 BFS와 DFS

왜 그래프 탐색을 쓸까요?

친구 관계, 도로, 의존성처럼 데이터의 핵심이 순서가 아니라 연결에 있을 때 그래프로 모델링합니다. BFS와 DFS는 연결 요소·경로·도달 가능성을 푸는 기본 탐색 엔진입니다.

LIFE EXAMPLE

생활 속에서 먼저 이해해 볼까요?

코드를 생각하지 말고, 아래 상황이 어떤 순서로 움직이는지만 따라가 보세요.

현실 예시 1

지하철 노선도

역은 점, 역 사이 노선은 선입니다. 두 번만 갈아타면 갈 수 있는 역을 찾을 때 가까운 역부터 펼쳐 봅니다.

자료구조와 연결하면관계를 간선으로 표현하고 BFS로 단계별 탐색합니다.
현실 예시 2

친구의 친구 찾기

나와 직접 아는 사람을 먼저 보고, 그다음 그 사람들의 친구를 확인합니다.

자료구조와 연결하면사람을 정점으로 두면 몇 다리 떨어졌는지 그래프로 셀 수 있습니다.

실무에서는 이렇게 씁니다

코딩 테스트의 장난감 예제를 넘어, 실제 시스템에서 같은 원리가 어디에 숨어 있는지 연결해 보세요.

01

소셜 그래프

몇 다리 건너 아는 사람인지 찾고 연결 집단을 분석합니다.

02

권한·조직도

상위 역할에서 상속되는 권한이나 하위 조직 전체를 탐색합니다.

03

크롤러

링크를 따라 페이지를 방문하되 visited로 순환을 막습니다.

04

통신망 점검

장비 연결 관계를 따라가며 끊어진 네트워크 구역을 찾습니다.

05

콘텐츠 추천

사용자가 본 작품과 연결된 비슷한 작품을 몇 단계 안에서 탐색합니다.

어떤 원리로 동작하나요?

그래프는 정점과 간선으로 표현합니다. BFS는 큐로 가까운 정점부터, DFS는 스택이나 재귀로 한 경로를 끝까지 탐색합니다. 인접 리스트 기준 둘 다 O(V+E)입니다.

핵심 연산과 비용

연산Python 표현시간
BFSqueue + visitedO(V+E)
DFSstack/recursion + visitedO(V+E)
인접 리스트 공간dict[list]O(V+E)
인접 행렬 공간V×VO(V²)
STEP BY STEP

A에서 BFS: A-B,C / B-D

  1. 1
    초기queue=[A], visited={A}
  2. 2
    A 방문B,C 예약 → queue=[B,C]
  3. 3
    B 방문D 예약 → queue=[C,D]
  4. 4
    완료방문 순서 A, B, C, D

⚠ 자주 하는 실수

  • 사이클이 있는 그래프에서는 visited가 없으면 무한 반복합니다.
  • BFS는 큐에 넣는 순간 방문 표시해야 중복 삽입을 막습니다.
  • 재귀 DFS는 깊은 그래프에서 파이썬 재귀 제한에 걸릴 수 있어 명시적 스택이 안전합니다.