나의 풀이
import heapq
import sys
def _main(city, bus, conn_dict):
start, end = map(int, sys.stdin.readline().rstrip().split())
visit = [float("inf")] * city
queue = []
heapq.heappush(queue, (0, start))
while queue:
now_cost, now_node = heapq.heappop(queue)
if visit[now_node - 1] < now_cost:
continue
for next_node, use_cost in conn_dict[now_node]:
total_cost = now_cost + use_cost
if (visit[next_node - 1] > total_cost):
visit[next_node - 1] = total_cost
heapq.heappush(queue, (total_cost, next_node))
return visit[end - 1]
city = int(sys.stdin.readline())
bus = int(sys.stdin.readline())
conn_dict = {i: [] for i in range(1, city + 1)}
for _ in range(bus):
a, b, cost = map(int, sys.stdin.readline().rstrip().split())
conn_dict[a].append((b, cost))
print(_main(city, bus, conn_dict))
시간 복잡도
while queue : 노드를 탐색 최소 비용을 구하기위해 왔던 루트 다시 탈수도 있음.. ( 이차형 시간 복잡도 )
now_cost, now_node = heapq.heappop(queue) : heapq 연산 ( 로그 시간 복잡도 )
해당 알고리즘 시간 복잡도 : 이차형 로그 시간 복잡도 ( O(n ** 2 log n )) )'코딩테스트 파이썬 > 백준' 카테고리의 다른 글
| 평범한 배낭 (12865 번) (0) | 2025.02.01 |
|---|---|
| 내려가기 ( 2096번 ) (1) | 2025.01.24 |
| 학번( 3711번 ) (0) | 2025.01.15 |
| 스티커 ( 9465번 ) (0) | 2025.01.14 |
| 정수 삼각형 ( 1932번 ) (0) | 2025.01.13 |