본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 5972번 택배 배송(python)

by 윤무무 2023. 2. 24.

https://www.acmicpc.net/problem/5972

 

5972번: 택배 배송

농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는

www.acmicpc.net

 

1. 난이도 골드5 (🥇) 

 

2. 문제해결 방법

전형적인 다익스트라 문제이다.

 

다익스트라 알고리즘을 사용하고 distance의 마지막 위치를 return 해주면 된다.

 

3. 내가 작성한 코드
import heapq
INF = int(1e9)

n,m = map(int,input().split()) #n헛간 m소

graph = [[] for _ in range(n+1)]
distance = [INF] * (n+1)

for i in range(m):
  a,b,c = map(int,input().split()) #a출발헛간 b도착헛간 c여물
  graph[a].append((b,c))
  graph[b].append((a,c))

def dij():

  q = []
  heapq.heappush(q,(0,1)) #출발지점
  distance[1] = 0

  while q:

    dist, now = heapq.heappop(q)

    if dist > distance[now]:
      continue
    
    for i in graph[now]:
      cost = dist + i[1]

      if cost < distance[i[0]]:
        distance[i[0]] = cost
        heapq.heappush(q,(cost, i[0]))

  return distance[n]

print(dij())

 

4. 메모

 

 graph 에서 1를 꺼내올 때 i[0] = 도착위치 i[1] = 가중치이고,

 

heapq에 삽입할 때는 가중치, 출발위치 순서이다.

댓글