| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- Websocket
- Props
- jwt
- Strict
- TS
- &연산
- es6
- npm
- 으
- 10px
- 데이터베이스 #try #이중
- 컴포넌튼
- entity
- 0.25px border
- 서버리스 #
- 전역변수
- ZOOM
- 클론코딩
- 타입스크립트
- 당근마켓
- 1px border
- font-size
- github
- 문서번호
- 0.5px border
- 0.75px border
- ES5
- TypeScript
- literal
- angular
Archives
- Today
- Total
복잡한뇌구조마냥
[알고리즘] BFS (너비 우선 탐색) 본문
🔍 BFS란?
BFS는 Breadth-First Search의 약자로,
한국어로는 너비 우선 탐색이라고 합니다.
📚 뜻 풀이
- "너비 우선"이란 말 그대로,
어떤 **정점(노드)**에서 시작해서
**가까운 노드(이웃)**부터 먼저 방문하고,
점점 멀리 있는 노드로 탐색을 확장해 나가는 방식입니다.
📌 BFS의 동작 방식
- 시작 노드를 큐(queue)에 넣고
- 큐에서 하나 꺼낸 뒤
- 인접한(연결된) 노드들을 전부 한 번씩 방문하면서 큐에 추가
- 큐가 빌 때까지 반복
💡 BFS의 특징
항목설명
| 사용 구조 | 큐 (Queue) |
| 방문 순서 | 가까운 노드부터 |
| 최단거리 구할 수 있음 | ✅ 가능 (모든 간선 가중치가 동일할 때) |
| 재귀 구조 가능? | ❌ 보통 반복문과 큐 사용 |
📷 예시 (간단한 그래프)
1
/ \
2 3
/ \
4 5
- BFS 방문 순서: 1 → 2 → 3 → 4 → 5
(1의 인접한 2,3 먼저, 그 다음 4,5)
🤔 DFS와 차이는?
구분BFS (너비 우선)DFS (깊이 우선)
| 구조 | Queue | Stack (or 재귀) |
| 순서 | 가까운 노드부터 | 끝까지 깊게 들어감 |
| 최단 거리 | ✅ 구할 수 있음 | ❌ 보장되지 않음 |
무방향 그래프 최단거리 찾기 코드 예제
/**
* n: 노드 갯수, edges: 노드 간선 정보, start: 시작 노드
*/
function(n, edges, start){
const path = Array.from({length: n+1}, () => []);
let visited = Array(n+1).fill(false);
let dist = Array(n+1).fill(-1);
for(let i =0; i<edges.length; i++) {
const [a,b] = edges[i];
path[a].push(b);
path[b].push(a); // 방향그래프는 해당 줄 제거
}
const queue = [start];
visited[start] = true;
dist[start] = 0;
while(queue.length){
const cur = queue.shift();
for (let i =0; i< path[cur].length; i++){
const next = path[cur][i];
if (!visited[next]){
visited[next] = true;
dist[next] = dist[cur]+1;
queue.push(next);
}
}
}
return dist.slice(1);
}
자기 자신에게 돌아오는 간선이 있는 노드가 있다면 별도의 알고리즘 구현 필요.
LIST
'공통 > 알고리즘 및 코테' 카테고리의 다른 글
| [자료구조] 개념 정리 (7) | 2025.05.18 |
|---|---|
| [알고리즘] 다익스트라 (Dijkstra`s Algorithm) (0) | 2025.05.17 |
| [알고리즘] 아호 코라식 (Aho-Corasick) (0) | 2025.05.14 |
| [코딩테스트] 백준 JavaScript 입력값 받기 (0) | 2025.05.10 |
| [알고리즘] 2주차 프로그래밍 기초 협업 내용 정리 (0) | 2022.08.15 |