https://www.acmicpc.net/problem/2624
2624번: 동전 바꿔주기
명보네 동네 가게의 현금 출납기에는 k 가지 동전이 각각 n1, n2, … , nk개 씩 들어있다. 가게 주인은 명보에게 T원의 지폐를 동전으로 바꿔 주려고 한다. 이때, 동전 교환 방법은 여러 가지가 있을
www.acmicpc.net
📌 작성한 코드
// 2624
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "Beakjoon/Gold/test.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
const N = Number(input.shift());
const M = Number(input.shift());
const coins = input.map((str) => str.split(" ").map(Number));
// dp[i][j] = 동전 i번까지 사용해서 만들 수 있는 j값의 개수
const dp = Array.from({ length: M }, () => new Array(N + 1).fill(0));
for (let i = 0; i < M; i++) {
const [price, count] = coins[i];
for (let j = 1; j <= count; j++) {
dp[i][j * price] += 1;
}
for (let k = 1; k <= N; k++) {
for (let j = 1; j <= count; j++) {
if (k - j * price >= 0 && i - 1 >= 0) dp[i][k] += dp[i - 1][k - j * price];
}
if (i - 1 >= 0) dp[i][k] += dp[i - 1][k];
}
}
console.log(dp[M - 1][N]);
📌 설명
점화식 : dp[i][j] = 동전 i번까지 사용해서 만들 수 있는 j값의 개수
- 동전마다 사용할 수 있는 최대 개수가 정해져 있는데, 반복을 돌면서 해당 개수를 1개, 2개, ..., n개까지 사용한 결과를 업데이트 한다.
동전 i까지 사용해서 j값을 만들 수 있는 방법의 종류
- 1. i-1 동전까지 사용해서 만든 값에 현재 동전을 더해서 j 값 만들기
- 2. 현재 동전 사용하지 않고 j값을 만든 개수 사용하기
for (let i = 0; i < M; i++) { // 사용할 수 있는 동전 종류의 개수
const [price, count] = coins[i]; // 동전의 값과 사용 할 수 있는 최대 개수
for (let j = 1; j <= count; j++) { // 현재 동전만 사용해서 만들 수 있는 값의 개수 증가시키기
dp[i][j * price] += 1;
}
for (let k = 1; k <= N; k++) {
for (let j = 1; j <= count; j++) {
// 현재 동전을 j개 사용해서 k값을 만드는 방법의 개수 == 이전 동전까지 사용했을 때 k값 - 현재 동전 j개의 값
if (k - j * price >= 0 && i - 1 >= 0) dp[i][k] += dp[i - 1][k - j * price];
}
// 현재 동전을 안쓰고 k값을 만드는 방법의 개수 추가하기
if (i - 1 >= 0) dp[i][k] += dp[i - 1][k];
}
}
✅ 성공

'알고리즘 > 백준' 카테고리의 다른 글
| [JavaScript/DP] 백준 골드 4 : 1915 - 가장 큰 정사각형 (0) | 2024.04.30 |
|---|---|
| [JavaScript] 백준 골드 3 : 17135 - 캐슬 디펜스 (0) | 2024.04.30 |
| [JavaScript/BFS] 백준 골드 4 : 2636 - 치즈 (1) | 2024.04.19 |
| [JavaScript] 백준 골드 5 : 20165 - 인내의 도미노 장인 호석 (2) | 2024.04.18 |
| [JavaScript/DP] 백준 골드 5 : 11058 - 크리보드 (0) | 2024.04.12 |