#그래프

노드와 간선의 관계를 탐색하고 복사하는 그래프 알고리즘 문제를 다룬다. 현재 4개의 풀이가 있다.

그래프 학습 가이드

필요한 주제만 펼쳐서 그래프의 핵심 개념을 익힌다.

그래프 기본 개념

그래프는 대상 사이의 관계를 노드와 간선으로 표현하는 자료구조다.

네 개의 노드 A, B, C, D가 간선으로 연결된 그래프 예시
노드는 대상, 간선은 대상 사이의 관계를 나타낸다.
  • 노드: 도시, 사람, 상태처럼 관계의 대상이 되는 단위
  • 간선: 두 노드 사이의 연결 관계
  • 방향 그래프: 간선마다 이동 방향이 있는 그래프
  • 가중치 그래프: 간선마다 거리나 비용이 붙은 그래프
  • 사이클: 시작 노드로 돌아오는 경로

문제에서 도시와 도로, 사람과 친구 관계, 작업과 의존성이 등장하면 그래프로 모델링할 수 있는지 먼저 확인한다.

그래프 표현 방식

코딩 테스트에서는 입력 크기와 간선 수에 따라 그래프 저장 방식을 고른다.

같은 그래프를 인접 리스트와 인접 행렬로 표현한 비교 그림
인접 리스트는 연결된 노드만, 인접 행렬은 모든 연결 여부를 저장한다.
표현특징적합한 상황
인접 리스트각 노드에서 연결된 노드만 저장간선이 적거나 일반적인 탐색 문제
인접 행렬두 노드의 연결 여부를 표에 저장노드 수가 작고 연결 여부를 자주 확인하는 문제
간선 목록간선을 `(출발, 도착, 비용)` 형태로 저장간선 자체를 정렬하거나 순회하는 문제

노드 수가 크고 간선 수가 제한적이면 보통 인접 리스트가 메모리와 탐색 시간 면에서 유리하다.

DFS와 BFS

DFS는 한 경로를 끝까지 탐색한 뒤 돌아오고, BFS는 가까운 노드부터 같은 거리 순서로 탐색한다.

DFS는 A, B, D, C 순서로 깊게 탐색하고 BFS는 A, B와 C, D 순서로 레벨별 탐색하는 그림
DFS는 한 경로를 깊게 탐색하고 BFS는 같은 거리의 노드를 먼저 탐색한다.
  • DFS: 연결 요소, 사이클 확인, 경로 존재 여부, 백트래킹
  • BFS: 간선 가중치가 같은 그래프의 최단 거리, 레벨별 탐색
  • 공통 핵심: 이미 방문한 노드를 기록해 재방문을 막음

인접 리스트를 사용하면 두 탐색 모두 시간 복잡도는 `O(V + E)`다. 여기서 `V`는 노드 수, `E`는 간선 수다.

문제 조건별 알고리즘 선택
문제 조건우선 고려할 방법
모든 연결 그룹 확인DFS, BFS
가중치가 같고 최단 거리BFS
양수 가중치의 최단 거리다익스트라
작업 순서와 의존성위상 정렬
모든 노드를 잇는 최소 비용크루스칼, 프림
그룹 합치기와 연결 여부Union-Find
자주 하는 실수
  • 방문 배열을 누락해 같은 노드를 계속 방문하는 경우
  • 무방향 간선을 한 방향으로만 저장하는 경우
  • 방문 표시를 늦게 해 큐나 재귀 호출에 같은 노드가 여러 번 들어가는 경우
  • BFS에서 큐에 넣을 때가 아니라 꺼낼 때 방문 처리해 거리가 중복 갱신되는 경우
  • 재귀 DFS가 깊어질 때 언어별 재귀 깊이 제한을 고려하지 않는 경우

전체 문제 풀이 보기