BOJ[11052] - 카드 구매하기 by JavaScript
카드 구매하기
문제
언어
- JavaScript
문제 풀이 step 1
- dp[n] = 카드 n개를 갖기 위해 지불해야 하는 금액의 최댓값
- k번째에 도달했을 때 1개 들어있는 카드팩을 살 수도 있고, 2개 또는 k개 들어있는 카드팩을 살 수 있습니다.
- 카드의 개수가 k가 될 수 있는 카드팩 중에서 금액이 최대가 되는 카드팩을 구매해야 합니다.
- k개 들어있는 카드팩 구매 + 이전까지 0개의 카드 구매
- k-1개 들어있는 카드팩 구매 + 이전까지 1개의 카드 구매
- …
- 1개 들어있는 카드팩 구매 + 이전까지 k-1개의 카드 구매
- 위의 경우 중에서 가격이 최대가 되는 경우를 구하면 됩니다.
소스 코드
const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
const solution = (input) => {
const N = parseInt(input[0]);
const P = [0, ...input[1].split(" ").map(Number)];
const dp = [...P];
for (let i = 1; i <= N; i++) {
for (let j = 1; j < i; j++) {
dp[i] = Math.max(dp[i], dp[i - j] + P[j]);
}
}
return dp[N];
};
console.log(solution(input));