백준(C, C++)/골드

백준 2624: 동전 바꿔주기 [C/C++]

치킨먹고싶어요 2022. 7. 13. 13:46

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

 

2624번: 동전 바꿔주기

명보네 동네 가게의 현금 출납기에는 k 가지 동전이 각각 n1, n2, … , nk개 씩 들어있다. 가게 주인은 명보에게 T원의 지폐를 동전으로 바꿔 주려고 한다. 이때, 동전 교환 방법은 여러 가지가 있을

www.acmicpc.net

코드

 

#include <iostream>
using namespace std;
int n, k;
int c[111], m[111];
int dp[11111]; 
int main() {
    cin >> n >> k;
    for (int i = 0; i < k; i++cin >> c[i] >> m[i];
    dp[0= 1;
    for (int i = 0; i < k; i++) {
        for (int j = n; j >= 0; j--) {
            if (dp[j]) {
                for (int l = 1; l <= m[i] and j + c[i] * l <= n; l++) {
                    dp[j + c[i] * l] += dp[j];
                }
            }
        }
    }
    cout << dp[n];
    return 0;
}
 
 
 

 

 

풀이

 

동전의 가지 수 만큼 반복한다

 

 

지폐의 금액을 역순으로 찾아간다

 

         역순으로 찾아가지 않으면, 중복으로 체크할 수 있습니다 

 

이미 나온 수라면 동전의 개수 만큼 더하기 해 준다. 

 

 


예시

input

10
3
5 3
10 2
1 5

 

output

3

위와 같은 입력이 있다고 가정합니다

 

1 2 3 4 5 6 7 8 9 10
0 0 0 0 1 0 0 0 0 1

동전 5원 3개만으로 나타낼 수 있는 동전의 교환 방법은 위와 같습니다

 

2.

1 2 3 4 5 6 7 8 9 10
0 0 0 0 1 0 0 0 0 2

동전 5원 3개, 10원 2개로 나타낼 수 있는 동전의 교환 방법은 위와 같습니다

 

3.

1 2 3 4 5 6 7 8 9 10
1 1 1 1 2 1 1 1 1 3

동전 1원 5개, 5원 3개, 10원 2개로 나타낼 수 있는 동전의 교환 방법은 위와 같습니다.

'백준(C, C++) > 골드' 카테고리의 다른 글

백준 4342: 유클리드 게임 [C/C++]  (0) 2022.08.09
백준 1863: 스카이라인 쉬운거 [C/C++]  (0) 2022.07.13
백준 1041: 주사위  (0) 2022.07.11
백준 23832: 서로소 그래프  (0) 2022.07.09
백준 12904: A와 B [C/C++]  (0) 2022.06.27