본문 바로가기

PS

[ 백준 / C++ ] 2294 : 동전 2

[ 문제 ]

 

2294번: 동전 2 (acmicpc.net)

 

[ 접근방법 ]

 

DP를 활용한다.

 

모든 경우를 체크했을 때 최대 nk번 계산하므로 시간은 충분하다.

 

[ 소스코드 ]

 

#include <iostream>
#include <set>
#include <algorithm>

using namespace std;

int n, k, dt[100010];
set<int> s;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> k;

    for(int i = 1; i <= k; i++)dt[i] = 100000;

    for(int i = 0; i < n; i++){
        int cnt;
        cin >> cnt;
        s.insert(cnt);
        dt[cnt] = 1;
    }

    for(int i = 1; i <= k; i++){
        for(auto j : s){
            if(i <= j)continue;
            if(dt[i - j] == 100000)continue;
            dt[i] = min(dt[i], dt[i - j] + 1);
        }
    }

    if(dt[k] == 100000)cout << "-1";
    else cout << dt[k];

    return 0;
}

'PS' 카테고리의 다른 글

[ 백준 / C++ ] 9084 : 동전  (0) 2024.07.10
[ 백준 / C++ ] 2644 : 촌수계산  (0) 2024.07.09
[ 백준 / C++ ] 13459 : 구슬 탈출  (0) 2024.07.05
[ 백준 / C++ ] 5635 : 생일  (0) 2024.06.28
[ 백준 / C++ ] 2343 : 기타 레슨  (0) 2024.06.27