π
νμ΄μ¬ μκ³ λ¦¬μ¦ μΈν°λ·°
μ± μ μ°Έκ³ νμ΅λλ€.
1μμ nκΉμ§ λ μ΄λΈμ΄ μ§μ λ n κ°μ λ Έλλ‘ κ΅¬μ±λ λ€νΈμν¬κ° μ 곡λ©λλ€. λν μκ°, μ΄λ μκ° λͺ©λ‘μ μ§μ μμ§λ‘ μ 곡ν©λλ€. times [i] = (ui, vi, wi), μ¬κΈ°μ uiλ μμ€ λ Έλ, viλ λμ λ Έλ, wiλ 걸리λ μκ°μ λλ€. μμ€μμ νκ²μΌλ‘ μ΄λν©λλ€. μ£Όμ΄μ§ λ Έλ kμμ μ νΈλ₯Ό 보λ λλ€. λͺ¨λ n κ°μ λ Έλκ° μ νΈλ₯Ό μμ νλ λ° κ±Έλ¦¬λ μκ°μ λ°νν©λλ€. n λ Έλκ° λͺ¨λ μ νΈλ₯Ό μμ ν μμλ κ²½μ° -1μ λ°νν©λλ€.
λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μ ν΅ν΄ νμ΄.
λ€μ΅μ€νΈλΌ μ 리
class Solution:
def networkDelayTime(self, times: List[List[int]], n: int, k: int) -> int:
graph = collections.defaultdict(list)
for a, b, cost in times:
graph[a].append((b, cost))
q = [(0, k)]
dist = collections.defaultdict(int)
while q:
time, node = heapq.heappop(q)
if node not in dist:
dist[node] = time
for v, w in graph[node]:
alt = time + w
heapq.heappush(q, (alt, v))
print(dist)
if len(dist) == n:
return max(dist.values())
return -1