반응형
# Problem
There are n cities connected by m flights. Each flight starts from city u and arrives at v with a price w. Now given all the cities and flights, together with starting city src and the destination dst, your task is to find the cheapest price from src to dst with up to k stops. If there is no such route, output -1. Constraints:
|
# My Answer
import collections
import heapq
class Solution:
def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, K: int) -> int:
route = collections.defaultdict(dict)
for u,v,w in flights:
route[u][v] = w
dist = collections.defaultdict(dict)
queue = []
queue.append((src,0,0))
while queue:
node,edge, price = heapq.heappop(queue)
temp = dist[node].values()
if edge > K+1 : # 경유지 수 넘어가면 skip
continue
if temp and price > min(temp): # 현재 값보다 들어온 price가 크면 skip
continue
if edge not in dist[node].keys() or dist[node][edge]>price:
dist[node][edge]=price # 경유지 수, 가격 저장
d = edge+1
for v,w in route[node].items():
p = price + w
heapq.heappush(queue,(v,d,p))
if dist[dst]:
return min(dist[dst].values())
else:
return -1
# Solution 1 - 다익스트라 알고리즘 응용
import collections
import heapq
class Solution:
def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, K: int) -> int:
graph = collections.defaultdict(list)
# 그래프 인접 리스트 구성
for u, v, w in flights:
graph[u].append((v, w))
# 큐 변수: [(가격, 정점, 남은 가능 경유지 수)]
Q = [(0, src, K)]
# 우선 순위 큐 최소값 기준으로 도착점까지 최소 비용 판별
while Q:
price, node, k = heapq.heappop(Q) # price 기준 우선순위
if node == dst:
return price
if k >= 0:
for v, w in graph[node]:
alt = price + w
heapq.heappush(Q, (alt, v, k - 1))
return -1
heappop()은 인덱스 0 기준으로 우선순위 순으로 pop
이 문제에서는 price 가 최소가 되어야 하므로 우선순위는 price 기준으로 해야함
price 순으로 가장 작은 값이 나오므로 node가 dst가 되면 그 때가 최소값임
반응형
'Algorithm > LEET CODE ( 파이썬 알고리즘 인터뷰)' 카테고리의 다른 글
[LEET CODE] 543. Diameter of Binary Tree (0) | 2021.04.19 |
---|---|
[LEET CODE] 104. Maximum Depth of Binary Tree (0) | 2021.04.15 |
[LEET CODE] 743. Network Delay Time ( 다익스트라 알고리즘) (0) | 2021.04.14 |
❗️[LEET CODE] 207. Course Schedule (0) | 2021.04.10 |
❗️[LEET CODE] 332. Reconstruct Itinerary (0) | 2021.04.10 |