๐Ÿ”’Algorithm

๋ฐฑ์ค€[JS] > 1446๋ฒˆ ์ง€๋ฆ„๊ธธ

devWarrior 2025. 3. 5. 23:28

๋ฌธ์ œ๋งํฌ

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

๋ฌธ์ œํ’€์ด

DP๋กœ ์—ฐ์‚ฐํšŸ์ˆ˜๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋‹ค. dp[1]์€ 1์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ”์„ ๋•Œ ์ตœ์†Œ๊ฑฐ๋ฆฌ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ˆœ์„œ๋Œ€๋กœ dp[1], dp[2], dp[3] ... ์ฑ„์›Œ๊ฐ€๋ฉด์„œ ๋งˆ์ง€๋ง‰์— dp[D]๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

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

let [N, D] = input
    .shift()
    .split(" ")
    .map((n) => Number(n));

let dp = Array(D + 1).fill(0);

let shortcut = input.map((str) => {
    return str.split(" ").map((n) => Number(n));
});

shortcut.sort((a, b) => {
    if (b[1] !== a[1]) {
        return a[1] - b[1];
    } else {
        return a[2] - b[2];
    }
});

for (let i = 1; i <= D; ++i) {
    dp[i] = dp[i - 1] + 1;

    for (let j = 0; j < N; ++j) {
        let [start, end, length] = shortcut[j];
        if (end === i) {
            dp[i] = Math.min(dp[i], dp[start] + length);
        }
    }
}

console.log(dp[D]);