class Solution:
def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int:
edges = [[] for _ in range(n)]
dist = [[10**7 for _ in range(k+2)] for _ in range(n)]
for a, b, c in flights:
edges[a].append([c,b])
pq = []
dist[src][-1] = 0
heappush(pq, [0, src, 0])
while pq:
dis, cur, prev = heappop(pq)
if dist[cur][prev-1] != dis:
continue
for price, next in edges[cur]:
if prev > k or dist[next][prev] <= dist[cur][prev-1] + price:
continue
dist[next][prev] = dist[cur][prev-1] + price
heappush(pq, [dist[next][prev], next, prev+1])
return min(dist[dst]) if min(dist[dst]) != 10**7 else -1
n이 작아서 대충 눈치를 챌 수 있었지만 생각보다 어려워서 고생했다..
다익스트라를 사용했고, 모든 k에 대해서 해당하는 거리를 다 할당했음. (시작점은 -1)
결국은 k 이하 조건을 어떻게 관리하냐가 핵심인데, 그냥 다 넣어줘도 될만한 크기..
우선순위 큐에서 뽑히기 전에 이미 최소거리가 갱신되어있는 경우에는 거른다.
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.