๋ฌธ์
ํ์ด ๊ณผ์
์ต๋ K
๊ฐ์ ๊ฒฝ์ ์ง๋ฅผ ํฌํจํ๋ค๋ ์กฐ๊ฑด ์๋์์ ํ ์ ์ ์์ ๋ชฉํ ์ ์ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
๋ฐ๋ผ์ ๋จ์ผ ์ ์ - ๋ชจ๋ ์
์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ์ธ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ
์ ๋ณํํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค.
์ฌ์ค ๊ฐ์ ์ ํ์ ์ํด ์ฐ์ ์์ ํ
๋ ์ฌ์ฉํ์ง ์์์ ์ ๋งคํ ๋ถ๋ถ์ด ์์ง๋งBFS + Dijkstra
์ ์ ํ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋ฌธ์ ์ ํต์ฌ์ k
๊ฐ์ ๊ฒฝ์ ์ง๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ ์
๋๋ค.
๊ธฐ์กด์ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ
์ ์ด์ ์ ๋ฐ๊ฒฌ๋์ด ํ์ ์ ์ฅ๋์ด ์๋ ๊ฒฝ๋ก ์ค
๋ ์งง์ ๊ฒฝ๋ก๊ฐ ๋ฐ๊ฒฌ๋์ด dist
๊ฐ ๊ฐฑ์ ๋์์ ๊ฒฝ์ฐ ํ์์ ์ด์ ์ ๋ฐ๊ฒฌ๋ ๊ฒฝ๋ก๊ฐ pop
๋์ด
์ฒ๋ฆฌํ ์ฐจ๋ก๊ฐ ๋๋ฉด ๊ทธ๋ฅ ๋ฌด์๋ฅผ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์คฌ์ต๋๋ค.
ํ์ง๋ง ์ด๋ฒ ๋ฌธ์ ์์๋ ๋น๋ก ๋น์ฉ์ด ๋ ๋ค๋๋ผ๋ ๋ฌด์ํ์ง ๋ง๊ณ ํด๋น ๊ฒฝ๋ก๋ฅผ ํตํด
์ต๋ k
๊ฐ์ ์ ์ ์ผ๋ก ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ๋ชจ๋ ์ง์ ์ ํ์
ํด์ค์ผํฉ๋๋ค.
์๋ฅผ ๋ค์ด k = 1
์ผ๋ ์์ ๊ฐ์ด ์๊ฐ ๊ทธ๋ํ์์ 0 -> 1 -> 2
๋ก ๊ฐ๋ ๊ฒฝ๋ก ๊ฐ์ 2
๋ผ๋ ์ฌ์ค์ ์๊ฒ ๋์๋ค๊ณ ํด์0 -> 2
๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ๋ฌด์ํ๊ฒ ๋๋ฉด 0 -> 2 -> 3
์ผ๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ง ๋ชปํ๊ฒ ๋ฉ๋๋ค.
์ฝ๋
/**
* @param {number} n
* @param {number[][]} flights
* @param {number} src
* @param {number} dst
* @param {number} K
* @return {number}
*/
var findCheapestPrice = function (n, flights, src, dst, K) {
// ์ธ์ ๋ฆฌ์คํธ ์์ฑ
const adj = new Map();
for (let [frm, to, weight] of flights) {
if (adj.has(frm)) adj.get(frm).push([to, weight]);
else adj.set(frm, [[to, weight]]);
}
function dijkstra(start) {
let q = [];
let dist = new Array(n).fill(Infinity);
q.push([start, 0, 0]);
dist[start] = 0;
while (q.length) {
let [here, cost, move] = q.shift();
if (move > K || !adj.get(here)) continue;
for (let [there, weight] of adj.get(here)) {
let nextDist = cost + weight;
if (dist[there] > nextDist) {
dist[there] = nextDist;
q.push([there, nextDist, move + 1]);
}
}
}
return dist[dst];
}
let ans = dijkstra(src);
return ans === Infinity ? -1 : ans;
};
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 39 - Combination Sum (Medium) (0) | 2021.03.02 |
---|---|
LeetCode 20 - Valid Parentheses (Easy) (0) | 2021.03.02 |
LeetCode 417 - Pacific Atlantic Water Flow (Medium) (0) | 2021.03.02 |
LeetCode 17 - Letter Combinations of a Phone Number (Medium) (0) | 2021.03.02 |
LeetCode 230 - Kth Smallest Element in a BST (Medium) (0) | 2021.03.02 |
๐ฌ ๋๊ธ