배달 (프로그래머스)

Namlulu·2022년 2월 12일
0

알고리즘

목록 보기
24/28
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. 순회를 도는 노드에 연결된 거리 > 해당 노드의 거리 + 가중치이면 순회를 도는 노드에 연결된 거리를 더 작은 값으로 갱신한다.

profile
Better then yesterday

0개의 댓글