본문 바로가기

알고리즘/리트코드

LeetCode 787. Cheapest Flights Within K Stops

먼저 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