1+ """
2+ ์์ = 1
3+ if ์์ ~ # ๋
ธ๋(N๊ฐ) ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ <= K : ๋ฐฐ๋ฌ ๊ฐ๋ฅTrue
4+ ๋ค์ต์คํธ๋ผ
5+ """
6+ import heapq
7+ INF = 2001
8+
9+ def dikstra (graph , distance , start ) :
10+ #2. distance ์ด๊ธฐํ : (0,start)๋ก ์ด๊ธฐํ / q์ (0,start ๋ฃ๊ธฐ)
11+ q = []
12+ distance [start ] = 0
13+ heapq .heappush (q ,(0 ,start ))
14+ #3. q์์ ์ต๋จ ๊ฑฐ๋ฆฌ(start -> X) & ๋ฐฉ๋ฌธx ๋
ธ๋ ์ ํ
15+ while q :
16+ dist , now = heapq .heappop (q ) # A->X
17+ if distance [now ] < dist : # ๋ฐฉ๋ฌธ ์๋ฃ
18+ continue
19+ #4. Cost(X->B)๊ณ์ฐ + Cost(A->X) < Cost(A->B) => distance ์
๋ฐ์ดํธ + q์ ๋ฃ๊ธฐ
20+ # graph ์ธ์ ๊ฐ์ (i[1]) , dist, ํdistance[B]
21+ for i in graph [now ]: # i = (b,c)....
22+ cost = dist + i [1 ]
23+ if cost < distance [i [0 ]] :
24+ distance [i [0 ]] = cost
25+ heapq .heappush (q ,(cost ,i [0 ]))
26+ return distance
27+
28+ def solution (N , road , K ):
29+ # input
30+ graph = [[] for _ in range (N + 1 )]
31+ distance = [INF ]* (N + 1 ) # ์ต๋จ๊ฑฐ๋ฆฌ ๊ทธ๋ํ
32+
33+ #0 ๊ทธ๋ํ ํ๋ ์ ์ a : [(b,c)...] #์๋ฐฉํฅ
34+ road .sort ()
35+ for r in road :
36+ a = r [0 ] ; b = r [1 ] ; c = r [2 ]
37+ graph [a ].append ([b ,c ])
38+ graph [b ].append ([a ,c ])
39+
40+ # ๋ค์ต์คํธ๋ผ
41+ distance = dikstra (graph ,distance , 1 )
42+
43+ # ๊ฑฐ๋ฆฌ < K ์ธ ๋ง์ ๊ฐ์
44+ count = 0
45+ for city in range (1 , N + 1 ) :
46+ if distance [city ] <= K :
47+ count += 1
48+ return count
49+
0 commit comments