먼저 Map을 사용하여 인접리스트를 만들어줍니다.
인접리스트를 잘 채워준 이후에 큐를 선언하고 출발지부터 넣어줍니다.
while 문을 돌면서 queue를 거리순으로 정렬하고 가장 거리가 가까운 것 부터 방문해나갑니다.
방문했던 곳에서는 방문했던 곳에서부터 더 방문할 수 있는 수를 확인해서 현재 방문할 수 있는 개수 - 1 보다 더 많이 방문할 수 있다면 continue를 해줍니다.
모든 간선을 사용하거나 도착지에 도착하면 while 문이 종료됩니다.
const findCheapestPrice = function(_, flights, src, dst, K) {
const adjacencyList = new Map();
for(const [start, end, cost] of flights) {
if(adjacencyList.has(start)) adjacencyList.get(start).push([end, cost]);
else adjacencyList.set(start, [[end, cost]]);
}
const queue = [[0, src, K+1]];
const visited = new Map();
while(queue.length) {
queue.sort((a, b) => a[0] - b[0]);
const [cost, city, stops] = queue.shift();
visited.set(city, stops);
if(city === dst) return cost;
if(stops == 0 || !adjacencyList.has(city)) {
continue;
}
for(const [nextCity, nextCost] of adjacencyList.get(city)) {
if(visited.has(nextCity) && visited.get(nextCity) >= stops-1) continue;
queue.push([cost+nextCost, nextCity, stops-1]);
}
}
return -1;
};
'알고리즘 > 리트코드' 카테고리의 다른 글
LeetCode 93. Restore IP Addresses (0) | 2023.01.21 |
---|---|
Leetcode 45. Jump Game II (0) | 2023.01.05 |
43. Multiply Strings (0) | 2022.09.12 |
139. Word Break (0) | 2022.05.08 |
54. Spiral Matrix (0) | 2022.04.30 |