이 글은 Breadth-First Search (BFS)을 처음부터 실무 관점까지 설명합니다. 목표는 코드를 외우는 것이 아니라 어떤 문제를 해결하고, 왜 동작하며, 실제 시스템에서 언제 사용하는지 이해하는 것입니다.
어떤 문제를 해결하나요?
이 글은 Breadth-First Search (BFS)을 처음부터 실무 관점까지 설명합니다. 목표는 코드를 외우는 것이 아니라 어떤 문제를 해결하고, 왜 동작하며, 실제 시스템에서 언제 사용하는지 이해하는 것입니다.
핵심 아이디어
문제를 그래프로 표현한 뒤 정점과 간선을 정해진 규칙에 따라 처리해 필요한 구조나 답을 얻습니다.
단계별 동작
- 문제에서 정점과 간선이 무엇인지 정의합니다.
- 적절한 그래프 표현 방식을 선택합니다.
- visited, distance, degree 같은 필요한 상태를 관리합니다.
- 실제 적용 전에 결과와 edge case를 검증합니다.
JavaScript 예제
function bfs(graph, start) {
const q = [start], seen = new Set([start]), order = [];
while (q.length) {
const u = q.shift(); order.push(u);
for (const v of graph[u] ?? []) if (!seen.has(v)) {
seen.add(v); q.push(v);
}
}
return order;
}실무 활용 예시
- 사용자와 서비스 간 관계 분석
- 소프트웨어 모듈 의존성 관리
- 네트워크 및 통신
- 비즈니스 시스템의 경로와 workflow
시간 및 공간 복잡도
O(V + E) زمان و O(V) حافظه
언제 사용하나요?
문제 구조와 목표가 이 알고리즘이 해결하도록 설계된 유형과 일치할 때 사용합니다.
언제 적합하지 않나요?
그래프 유형이나 목표가 다르면 무조건 적용하지 마세요. 더 단순하거나 빠른 알고리즘이 있을 수 있습니다.
정리
알고리즘 이름만 보고 선택하지 마세요. 그래프가 방향/무방향인지, 가중/무가중인지, 그리고 목표가 traversal, reachability, shortest path, connectivity, spanning structure, optimization 중 무엇인지 먼저 확인해야 합니다.