[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค - ๊ฐ์ฅ ๋จผ ๋ ธ๋
[๋ฌธ์ ]
https://school.programmers.co.kr/learn/courses/30/lessons/49189
[ํ์ด]
๋ ธ๋ 1๋ถํฐ์ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ชจ๋ ๊ตฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ BFS๋ฅผ ํ์ฉํ์์ต๋๋ค.
์ด๊ธฐ ์ธํ
- ์๋ฐฉํฅ ๊ทธ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ด์ฐจ์ ๋ฐฐ์ด graph์ ์ ๋ณด๋ฅผ ์ ์ฅํ์์ต๋๋ค.
- ๋ฐฉ๋ฌธํ ์ ์ ์ ์ ์ฅํ๋ visit๋ฐฐ์ด์ ์ ์ธํ๊ณ false๋ก ์ด๊ธฐํ ํด์ฃผ์์ต๋๋ค.
- ๋ ธ๋ 1๋ถํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ dist ๋ฐฐ์ด์ ์ ์ธํ๊ณ 0์ผ๋ก ์ด๊ธฐํ ํด์ฃผ์์ต๋๋ค.
- ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ฉฐ ์ต๋ ๊ฑฐ๋ฆฌ max๋ฅผ ์ ์ฅํ๊ธฐ ์ํด max๋ฅผ ์ ์ธํฉ๋๋ค.
ํ๋ฅผ ํ์ฉํด ๊ทธ๋ํ๋ฅผ ํ์ํ์๋๋ฐ, queue์์ ์ ์ 1๊ฐ๋ฅผ shiftํ์ฌ ํด๋น ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ๋ค์ ํ์ํ๋ฉฐ ํ์ฌ ์ ์ ์ dist์ ๋ณด + 1์ ์ ์ฅํ์์ต๋๋ค. ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๊ณผ์ ์์ ์ต๋ ๊ฑฐ๋ฆฌ max๋ฅผ ๊ฐฑ์ ํด์ฃผ์์ต๋๋ค.
1์ ๋ฝ์์ 2, 3 ๋ฐฉ๋ฌธ ํ, dist[2] = 1, dist[3] = 1
2๋ฅผ ๋ฝ์์ 4, 5 ๋ฐฉ๋ฌธ ํ, dist[4] = 2, dist[5] = 2
3์ ๋ฝ์์ 6 ๋ฐฉ๋ฌธ ํ, dist[6] = 2
๋ฐ๋ผ์ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๊ณ ๋ ํ dist๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
[ 0, 0, 1, 1, 2, 2, 2 ]
์ต๋ ๊ฑฐ๋ฆฌ๋ 2 ์ด๋ฏ๋ก filter์ฐ์ฐ์ ํตํด dist์์ 2์ ๊ฐ์๋ฅผ ๊ตฌํ๋ฉด answer์ 3์ด ๋ฉ๋๋ค.
[์ฝ๋]
function solution(n, edge) {
var answer = 0;
const graph = Array.from({length: n+1}, () => []);
edge.forEach((item) => {
graph[item[0]].push(item[1]);
graph[item[1]].push(item[0]);
});
const findDist = () => {
const dist = Array.from({length: n+1}, () => 0);
const visit = Array.from({length: n+1}, () => false);
let max = 0;
const queue = [];
visit[1] = true;
queue.push(1);
while(queue.length !== 0) {
const q = queue.shift();
for(let i=0;i<graph[q].length;i++) {
const node = graph[q][i];
if(visit[node]) {
continue;
}
dist[node] = dist[q] + 1;
visit[node] = true;
if(max < dist[node]) {
max = dist[node];
}
queue.push(node);
}
}
answer = dist.filter((d) => d === max).length;
}
findDist();
return answer;
}