function solution(N, road, K) {
const dist = new Array(N + 1).fill(Infinity)
const graph = Array.from(new Array(N + 1), () => [])
dist[1] = 0
const queue = [{to: 1, len: 0}]
road.forEach((item) => {
const [src, dest, len] = item
graph[src].push({to: dest, len})
graph[dest].push({to: src, len})
})
while (queue.length) {
const {to} = queue.shift()
graph[to].forEach((step) => {
if (dist[step.to] > dist[to] + step.len) {
dist[step.to] = dist[to] + step.len
queue.push(step)
}
})
}
return dist.filter((nodeDist) => nodeDist <= K).length
}
=> 위 코드는 다음의 절차를 따른다.
1. 모든 그래프 문제처럼 거리와 그래프를 만든다.
2. 초기 값을 선언한다.
3. 문제 조건대로 그래프를 구성한다.
4. BFS돌면서 순회한다.
5. 순회를 도는 노드에 연결된 거리 > 해당 노드의 거리 + 가중치이면 순회를 도는 노드에 연결된 거리를 더 작은 값으로 갱신한다.