Coding Problem/DP

[BOJ 9084] 동전

Yepchani 2025. 2. 10. 13:34
반응형

문제

동전

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

 

 

풀이

설명

동전의 종류가 주어질 때, 주어진 금액을 만드는 모든 방법을 구하는 문제입니다.

 

DP를 이용해 해결할 수 있습니다.

 

dp[i]는 금액 i를 만들 수 있는 방법의 수입니다.

동전 종류와 개수만 가지고 방법을 세므로 누적합을 이용할 수 있습니다.

dp[0] = 1로 초기화 해줍니다.

 

동전 종류가 coin이라고 한다면, i원을 만들 수 있는 방법의 수는 다음과 같습니다.

이전까지의 동전 종류로 민들 수 있는 방법의 수 + (i - coin)원을 만들 수 있는 방법의 수입니다.

따라서 dp[i] = dp[i] + dp[i - coin]입니다.

 

예시 코드

function solution() {
  const T = Number(input());
  const answer = [];

  for (let tc = 0; tc < T; tc++) {
    const N = Number(input());
    const coins = input().split(" ").map(Number);
    const M = Number(input());
    // dp[i] = 금액 i를 만들 수 있는 방법의 수
    const dp = Array(M + 1).fill(0);
    dp[0] = 1;

    for (const coin of coins) {
      for (let i = coin; i <= M; i++) {
        dp[i] += dp[i - coin];
      }
    }
    answer.push(dp[M]);
  }

  return answer.join("\n");
}

'Coding Problem > DP' 카테고리의 다른 글

[BOJ 1446] 지름길  (0) 2025.02.15
[BOJ 11727] 2 x n 타일링 2  (0) 2025.02.14
[BOJ 2116] 주사위 쌓기  (0) 2025.02.09
[프로그래머스] 도둑질  (0) 2025.01.29
[프로그래머스] 거스름돈  (0) 2025.01.17