문제
https://www.acmicpc.net/problem/2294
이전 포스트의 동전1과 같은 DP 문제, 이번엔 주어진 목표 금액과, 주어진 동전의 개수를 최소로했을때 몇갠지 세는 것이다.
풀이
동전1과 달리 0원일때는 DP[0] = 0으로 초기화, 그리고 각 동전마다 DP배열에 1씩 추가하는 형태로 나아간다. 이때 DP배열이 추가하는 것보다 작으면 냅둬서 최소 개수를 구해나간다.
이때 DP배열은 미리 최댓값INF을 대입해놔서, 만들어질 수 없는 값임을 초기화 시킨다.
#include <bits/stdc++.h>
using namespace std;
const int INF = 10001;
int n, k;
vector <int> coin;
int dp[10001];
int main(){
cin >> n >> k;
int num;
for (int i = 0; i < n; ++i) {
cin >> num;
coin.push_back(num);
}
fill(dp, dp+10001, INF);
dp[0] = 0;
for (int i = 0; i < coin.size(); ++i) {
for (int j = coin[i]; j <= k; ++j) {
dp[j] = min(dp[j], dp[j - coin[i]] + 1);
}
}
if(dp[k] == INF) cout << -1;
else cout << dp[k];
}
DP문제는 유형이 참많아서 까다롭다...
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
[백준] 15686번 치킨배달 C++ (0) | 2024.09.11 |
---|---|
[백준] 1로 만들기 C++ 두가지 풀이 BFS, DP (0) | 2024.09.03 |
[백준] DP 2293번 동전1 C++ 풀이 (0) | 2024.09.03 |
[백준] 1915번 최소비용 구하기 C++ 풀이 (1) | 2024.08.28 |
[백준] 14502번 연구소 C++ 풀이 (3) | 2024.08.28 |