가장 먼 노드
구현
edge의 연결관계를 어떻게 구현할까 고민하다, 배열 인덱스에 관련된 노드들을 넣어두는 방식을 생각했다. Javascript에서는 배열 초기화를 어떻게 하나 알아보다가 Array.from이라는 것이 있다는 걸 알아 좋은 시간이였다.
Queue를 기반으로 BFS로 root 노드인 1로부터 가장 먼 길이의 노드들의 개수를 얻어냈다.
let answer = 0;
let maxLen = 0;
let conn;
let visit;
const bfs = (start) => {
const Q = [];
Q.push(start);
visit[start.num] = true;
while (Q.length > 0) {
const curNode = Q.shift();
const curNum = curNode.num;
const curLen = curNode.len;
if (maxLen === curLen) {
answer++;
}
if (maxLen < curLen) {
answer = 1;
maxLen = curLen;
}
for (var i = 0; i < conn[curNum].length; ++i) {
let nNum = conn[curNum][i];
if (visit[nNum]) continue;
Q.push({ num: nNum, len: curLen + 1 });
visit[nNum] = true;
}
}
};
function solution(n, edge) {
conn = Array.from({ length: n + 1 }, () => []);
visit = Array.from({ length: n + 1 }, () => false);
for (var i = 0; i < edge.length; ++i) {
const A = edge[i][0];
const B = edge[i][1];
conn[A].push(B);
conn[B].push(A);
}
bfs({ num: 1, len: 0 });
return answer;
}
댓글남기기