[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฐฐ๋‹ฌ / ํŒŒ์ด์ฌ / (๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜)
Problem Solving ๐Ÿ”ฅ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฐฐ๋‹ฌ / ํŒŒ์ด์ฌ / (๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

https://programmers.co.kr/learn/courses/30/lessons/12978

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋ฐฐ๋‹ฌ

5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4

programmers.co.kr

ํ’€์ด

์ „ํ˜•์ ์ธ ๋‹ค์ต์ŠคํŠธ๋ผ ๋ฌธ์ œ์ด๋‹ค.
๋”ฑํžˆ ํ’€์ด๊ณผ์ •์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ๊ฒŒ ์—†๋‹ค.

import heapq as h

def solution(N, road, K):
    answer = 0
    INF = 987654321
    dist = [ INF for _ in range(N+1) ]
    dist[1] = 0
    edges = [ [] for _ in range(N+1) ]
    for (fr, to, w) in road:
        edges[fr].append((to, w))
        edges[to].append((fr, w))
    pq = []
    for (to, w) in edges[1]:
        h.heappush(pq,(w, 1, to)) 
    while pq:
        w, fr, to = h.heappop(pq)
        if  dist[fr] + w < dist[to]:
            dist[to] = dist[fr] + w
            for (tt, ww) in edges[to]:
                h.heappush(pq,(ww,to,tt))
    return len(list(filter(lambda x:x <= K,dist)))