알고리즘/알고리즘 문제풀이

[백준] 2294: 동전 2

mint* 2023. 12. 5. 10:42
728x90

url : https://www.acmicpc.net/problem/2294

 

2294번: 동전 2

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어

www.acmicpc.net

 

동전 1 문제는 금액을 만드는 경우의 수이고, 동전 2 문제는 금액을 만드는 경우 중 동전의 개수가 최소인 경우의 동전 수를 구하는 문제이다.

DP를 이용하여 해당 금액에 대한 최소 동전 개수를 저장하여 활용함으로써 정답을 찾을 수 있다.

 

코드

#include <bits/stdc++.h>
using namespace std;
int n, k;
int coins[10004], dp[10004];
int main() {
    //1. 입력 받기
    cin >> n >> k;
    for (int i=0;i<n;i++){
        cin >> coins[i];
    } 
    //2. 동전의 경우의 수 구하기
    fill(dp, dp+10004, 10004);
    dp[0]=0;
    for(int i=0;i<n;i++){
        for(int j=coins[i];j<=k;j++){
            dp[j] = min(1 + dp[j-coins[i]], dp[j]);
        }
    }
    //3. 정답 출력
    if(dp[k]==10004) cout << -1 << "\n";
    else cout << dp[k];
    
    return 0;
}

 

 

 

 

728x90