
알고리즘 문제 풀이 스터디를 하며 만든 자료입니다.
개인 공부 기록용으로 올립니다.
그래프는 정점(Vertex, 또는 노드(Node)라고도 함)과 이들을 연결하는 간선(Edge)로 구성된 비선형 자료구조

간략한 그래프 용어 정리
| 용어 | 설명 |
|---|---|
| 정점(Vertex), 노드(Node) | 그래프에서 간선이 만나는 지점 하나의 점으로, 데이터 저장시 사용 |
| 간선(Edges) | 노드 간의 관계 또는 연결을 나타내는 선 |
| 차수(Degree) | 노드에 연결된 간선(Edge)의 개수 (방향 그래프에서는 in-degree, out-degree로 나뉨) |
| 가중치(Weight) | 간선에 부여된 값 (예: 거리, 비용 등), 특성을 나타냄 |
| 사이클(Cycle) | 같은 노드으로 되돌아오는 경로(시작 노드와 끝 노드가 동일한 경로) |
예시

그래프를 표현하는 대표적인 방식은 아래 두 가지입니다.

관계를 2차원 배열로 표현
관계를 링크드 리스트로 표현
💡 언제 무엇을 사용할까?
간선(Edge)이 많은 밀집 그래프 → 인접 행렬(Adjacency matrix)
간선(Edge)이 적은 희소 그래프 → 인접 리스트(Adjacency List)
대표적인 그래프 알고리즘 3가지
가능한 깊게 탐색한 후, 더 이상 갈 곳이 없으면 이전 정점으로 되돌아가는 방식
다른 경로로 넘어가기전 해당 분기를 완벽하게 탐색
⇒ 세로 탐색

한 노드에서 시작해 인접한 노드부터 모두 탐색하고 이후 그 인접한 노드의 인접한 노드 반복… ⇒ 가로 탐색


| DFS | BFS | |
|---|---|---|
| 탐색 방식 | 깊이 우선 분기마다 깊게 탐색 | 너비 우선 인접 노드부터 탐색 |
| 구현 방법 | 스택, 재귀 함수 | 큐 |
| 주 사용처 | 미로 찾기, 사이클 탐지, 백트래킹 | 최단 거리 탐색, 전염병 확산 시뮬레이션 |
| 메모리 | 호출 깊이만큼 사용 | 큐 크기만큼 사용 |
| 최단 경로 보장 | ❌ | ⭕️ |
O(N + E)O(N^2)N: 노드의 개수, E: 간선의 개수
→ 일반적으로 인접 리스트 방식이 더 효율적
두 방식 모두 조건 내의 모든 노드를 검색한다는 점에서 시간 복잡도는 동일
BUT 일반적으로 DFS를 재귀 함수로 구현한다는 점에서 DFS보다 BFS가 조금 더 빠르게 동작함
그래프에서 한 노드에서 다른 모든 노드까지의 최단 경로를 구하는 알고리즘
→ 매번 최단 경로의 정점을 선택해 탐색을 반복하는 것
(O(E log V))
| 알고리즘 | 특징 | 주 사용처 |
|---|---|---|
| DFS | 최대한 깊게 탐색 | 사이클 탐지, 경로 존재 여부 |
| BFS | 가까운 노드부터 탐색 | 최단 거리 탐색 (무가중치 그래프) |
| Dijkstra | 가까운 거리부터 최단 거리 갱신 | 실시간 길찾기 (가중치 그래프의 최단 경로 탐색) |