๋ฐฑ์ค€ [node.js] > 1916๋ฒˆ ์ตœ์†Œ ๋น„์šฉ ๊ตฌํ•˜๊ธฐ

2024. 11. 16. 18:29ยท๐Ÿ”’Algorithm

 

๋ฌธ์ œ

https://www.acmicpc.net/problem/1916

 

ํ’€์ด

์ฒ˜์Œ์— dfs๋กœ ์ ‘๊ทผํ•ด์„œ ํ’€์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ‹€๋ ค์„œ dp๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

 

์ผ๋‹จ map์ด๋ผ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์„ ๊ตฌํ˜„ํ•œ๋‹ค. ์ด 2์ฐจ์› ๋ฐฐ์—ด์˜ map[ i ][ j ] ๋Š” i๋„์‹œ์—์„œ j ๋„์‹œ๋กœ ๊ฐˆ ์‹œ ๊ฐ€์žฅ ๊ฐ€๊ฒฉ์ด ์‹ผ ๋ฒ„์Šค ์š”๊ธˆ์„ ๋‚˜ํƒ€ ๋‚ธ๋‹ค. ๋งŒ์•ฝ map[ i ][ j ] = Infinity ์ด๋ฉด ํ•ด๋‹น ๋ฃจํŠธ๋Š” ๋ฒ„์Šค๊ฐ€ ๋‹ค๋‹ˆ์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  dp๋ผ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์„ ๊ตฌํ˜„ํ•œ๋‹ค. 

dp[ i ][ j ] ๋Š” i ๋„์‹œ์—์„œ j ๋„์‹œ๋กœ ๊ฐ€๋Š” ๋ฃจํŠธ๋Š” ๊ฐ€์žฅ ๋ฒ„์Šค์š”๊ธˆ์ด ์‹ผ ๋ฃจํŠธ์˜ ์š”๊ธˆ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด์„œ 2์ฐจ์› ๋ฐฐ์—ด dp๋ฅผ ์™„์„ฑ์‹œํ‚ค๊ณ  ์ตœ์ข…์ ์œผ๋กœ dp[์ถœ๋ฐœ์ ][๋„์ฐฉ์ ] => ์ตœ์†Œ๋น„์šฉ ์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. 

 

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

let [cityCnt, routeCnt, ...arr] = input;

cityCnt = Number(cityCnt);
routeCnt = Number(routeCnt);

let [start, end] = arr
    .pop()
    .split(" ")
    .map((num) => Number(num));

// 2์ฐจ์› ๋ฐฐ์—ด ์ƒ์„ฑ ( ์š”๊ธˆ ํ‘œ์‹œ๋ฅผ ์œ„ํ•ด )
// map[i][j] => iํฌ์ธํŠธ์—์„œ jํฌ์ธํŠธ๋กœ ๊ฐ€๋Š” ๋ฃจํŠธ์˜ ์š”๊ธˆ
let map = Array.from({ length: cityCnt + 1 }, () => {
    return Array(cityCnt + 1).fill(Infinity);
});

for (let i = 0; i < arr.length; ++i) {
    let [s, e, pay] = arr[i].split(" ").map((num) => Number(num));
    if (map[s][e] !== Infinity) {
        map[s][e] = Math.min(pay, map[s][e]);
    } else {
        map[s][e] = pay;
    }
}

let dp = Array.from({ length: cityCnt + 1 }, () => {
    return Array(cityCnt + 1).fill(Infinity);
});

let rest = [];

for (let i = 1; i < cityCnt + 1; ++i) {
    if (map[start][i] !== Infinity) {
        dp[start][i] = map[start][i];
        rest.push(i);
    }
}
while (rest.length) {
    let middlePoint = rest.shift();
    for (let i = 1; i < cityCnt + 1; ++i) {
        if (map[middlePoint][i] !== Infinity && dp[start][middlePoint] !== Infinity) {
            if (dp[start][i] > dp[start][middlePoint] + map[middlePoint][i]) {
                dp[start][i] = dp[start][middlePoint] + map[middlePoint][i];

                if (!rest.includes(i)) {
                    rest.push(i);
                }
            }
        }
    }
}

console.log(dp[start][end]);

'๐Ÿ”’Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€[node.js] > 1966๋ฒˆ ์ œ์ถœ  (0) 2024.11.20
๋ฐฑ์ค€ [nodejs] > 1629๋ฒˆ ๊ณฑ์…ˆ  (0) 2024.11.17
๋ฐฑ์ค€[node.js] > 11660๋ฒˆ ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ5  (0) 2024.11.14
๋ฐฑ์ค€[nodejs] > 9465๋ฒˆ ์Šคํ‹ฐ์ปค  (1) 2024.11.13
๋ฐฑ์ค€[node.js] > 1181๋ฒˆ ๋‹จ์–ด ์ •๋ ฌ  (0) 2024.11.12
'๐Ÿ”’Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€[node.js] > 1966๋ฒˆ ์ œ์ถœ
  • ๋ฐฑ์ค€ [nodejs] > 1629๋ฒˆ ๊ณฑ์…ˆ
  • ๋ฐฑ์ค€[node.js] > 11660๋ฒˆ ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ5
  • ๋ฐฑ์ค€[nodejs] > 9465๋ฒˆ ์Šคํ‹ฐ์ปค
devWarrior
devWarrior
  • devWarrior
    devWarrior
    devWarrior
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐ŸงฉDev (263)
      • โญFE (34)
      • ๐Ÿ”’Algorithm (155)
      • โž•Etc. (11)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
    • ๊ด€๋ฆฌ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฐฑ์ค€
    ํ”„๋ก ํŠธ์—”๋“œ
    node.js
    ์‹ค๋ฒ„1
    javascript
    Easy
    ๊ทธ๋ฆฌ๋””
    nodejs
    ๊ตฌํ˜„
    ์‹ค๋ฒ„4
    leetcode
    Lv2
    ์‹ค๋ฒ„2
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    js
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    dp
    ์‹ค๋ฒ„3
    Algorithm
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๊ณจ๋“œ5
    ์ž์Šค
    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    DFS
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    react
    ์ฝ”ํ…Œ
    ์˜ค๋ธ”์™„
    FE
    BFS
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
devWarrior
๋ฐฑ์ค€ [node.js] > 1916๋ฒˆ ์ตœ์†Œ ๋น„์šฉ ๊ตฌํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”