๐ŸŽฒ ๋ฐฑ์ค€ 1106๋ฒˆ ํ˜ธํ…” [JS]

Jeongeunยท2024๋…„ 5์›” 10์ผ

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
188/188

๐Ÿงถ ํ’€์ด

  • dp[i]๋Š” i๋ช… ์ผ ๋•Œ ์ตœ์†Œ๋น„์šฉ
  • ๊ฐ ๋„์‹œ๋งˆ๋‹ค dp ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
    -dp[people(์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ณ ๊ฐ์˜ ์ˆ˜)] > ํ™๋ณด๋น„์šฉ ์ด๋ฉด dp๊ฐ’ ์—…๋ฐ์ดํŠธ
    -dp[1] ๋ถ€ํ„ฐ dp[C]๊นŒ์ง€ dp ์ธ๋ฑ์Šค๊ฐ€ people ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด dp[i], ํ™๋ณด๋น„์šฉ์ค‘ ์ž‘์€ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธ, ์•„๋‹ˆ๋ผ๋ฉด dp[i], dp[people] + dp[i - people]๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๋ฉฐ dp[C]๊ฐ’์„ ๊ตฌํ•ด์ค€๋‹ค.

์ฝ”๋“œ

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim()
  .split("\n")
  .map((el) => el.split(" ").map(Number));
const [C, N] = input.shift();

const dp = new Array(C + 1).fill(Infinity);
dp[0] = 0;

for (let [cost, people] of input) {
  if (dp[people] > cost) dp[people] = cost;
  for (let i = 1; i <= C; i++) {
    dp[i] =
      i < people
        ? Math.min(dp[i], cost)
        : Math.min(dp[i], dp[people] + dp[i - people]);
  }
}

console.log(dp[C]);

๐ŸŽจ ์ฐธ๊ณ  ์ฝ”๋“œ

0๊ฐœ์˜ ๋Œ“๊ธ€