Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions Programmers/Level3/49189_가장_먼_노드.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
⭐️ 문제 정보 ⭐️
문제 : 49189 - 가장 먼 노드
레벨 : Level 3
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/49189
*/

// ANCHOR : 26.02.04 풀이
/**
APPROACH:
하나의 노드에서 다른 노드"들"까지의 최단경로를 구해야 하는 문제이기 때문에 다익스트라 알고리즘을 먼저 생각했었음.
하지만 이 문제는 모든 간선의 가중치가 1로 동일하기 때문에 다익스트라를 쓰지 않고 BFS만으로도 각 노드까지의 최단거리를 구할 수 있다.
*/
function solution(n, edge) {
const adj = Array.from({ length: n + 1 }, () => []);
for (const [a, b] of edge) {
adj[a].push(b);
adj[b].push(a);
}

// -1은 아직 모르는 거리를 의미함
// NOTE : BFS에서는 첫 방문 거리가 곧 최단거리이므로 (다익스트라처럼 갱신 x) Infinity 대신 -1을 쓴다.
const dist = Array.from({ length: n + 1 }, () => -1);

// BFS 시작
dist[1] = 0; // 시작 지점
const queue = [1];
let head = 0;
while (head < queue.length) {
const front = queue[head++];
const neighbors = adj[front];
if (neighbors.length === 0) continue;

neighbors.forEach((neighbor) => {
if (dist[neighbor] !== -1) return;
// 처음 방문하는 시점이 바로 최단거리이므로 주저없이 업데이트
// 방문 기록은 겸사겸사
dist[neighbor] = dist[front] + 1;
queue.push(neighbor);
});
}

const maxDist = Math.max(...dist);
const answer = dist.filter((d) => d === maxDist).length;
return answer;
}
1 change: 1 addition & 0 deletions Programmers/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
| 42888 | 오픈채팅방 | [42888_오픈채팅방.js](Level2/42888_오픈채팅방.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/42888) |
| 42889 | 실패율 | [42889_실패율.js](Level1/42889_실패율.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/42889) |
| 43162 | 네트워크 | [43162_네트워크.js](Level3/43162_네트워크.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/43162) |
| 49189 | 가장 먼 노드 | [49189_가장_먼_노드.js](Level3/49189_가장_먼_노드.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/49189) |
| 49993 | 스킬트리 | [49993_스킬트리.js](Level2/49993_스킬트리.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/49993) |
| 49994 | 방문 길이 | [49994_방문_길이.js](Level2/49994_방문_길이.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/49994) |
| 60057 | 문자열 압축 | [60057_문자열_압축.js](Level2/60057_문자열_압축.js) | [🔗](https://school.programmers.co.kr/learn/courses/30/lessons/60057) |
Expand Down