[boj] 16194. 카드 구매하기 2 (node.js)
const arr = [0, ...input().split(" ").map(Number)];
for (let i = 1; i <= N; i++) {
for (let j = 0; j <= Math.floor(i / 2); j++) {
arr[i] = Math.min(arr[i], arr[j] + arr[i - j]);
}
}
dp[N] = N개의 카드로 지불해야 하는 금액의 최솟값
으로 정의하면, 문제에서 주어진 카드의 금액(arr[N])보다 이 dp[N]의 값이 작아질 수 있다. 따라서 갱신할 때의 초기값으로 arr[N]을 활용하는 것이 아닌 dp[N]을 활용해야 하며, 이는 arr[N]과 dp[N]의 분리가 불필요함을 의미하므로 dp 배열을 굳이 사용하기보다 arr 배열의 값을 갱신해주면 된다.const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const solution = () => {
const N = +input();
const arr = [0, ...input().split(" ").map(Number)];
for (let i = 1; i <= N; i++) {
for (let j = 0; j <= Math.floor(i / 2); j++) {
arr[i] = Math.min(arr[i], arr[j] + arr[i - j]);
}
}
console.log(arr[N]);
};
let line = 0;
const input = () => stdin[line++];
let stdin = [];
rl.on("line", function (line) {
stdin.push(line);
}).on("close", function () {
solution();
process.exit();
});