여러분은 실력을 인정받아 전 세계적으로 사용할 수 있는 자동판매기용 프로그램의 개발을 의뢰받았다.
이번에도 역시 자동판매기에서 이용자에게 거스름돈을 남겨줄 때, 거스름돈에 사용될 동전의 수를 가정 적게하는 것이다.
입력으로 거슬러 줘야할 돈의 액수와 그 나라에서 이용하는 동전의 가지 수 그리고 동전의 종류가 들어온다.
여러분은 그 돈의 액수를 거슬러 주는 여러가지 방법들 중 가장 적은 동전은 몇개인지 구하는 프로그램을 작성해야 된다.
입력
첫 번째 줄에는 거슬러 줘야할 돈의 액수가 입력된다. (이 값은 10,000원 이하이다.)
다음 줄에는 그 나라에서 사용되는 동전의 종류의 수가 입력된다. (단 동전의 수는 10이하이다.)
마지막 줄에는 동전의 수 만큼의 동전 액수가 오름 차순으로 입력된다. (동전의 최대값은 10,000원 이하이다.)
모든 입력에 대해 답이 있음을 보장한다.
출력
최소의 동전의 수를 출력한다.
더보기
입력 예시
730
5
10 50 100 500 1250
출력 예시
6
#include<iostream>
#include<algorithm>
using namespace std;
const int INF = 987654321;
int N;
int coin[11];
int coin_dp[10001];
int solve(int amount) {
coin_dp[0] = 0;
for (int i = 1; i <= amount; i++) {
int minValue = INF;
for (int j = 0; j < N; j++)
minValue = min(minValue, i - coin[j] < 0 ? INF : coin_dp[i - coin[j]]);
coin_dp[i] = 1 + minValue;
}
return coin_dp[amount];
}
int main() {
int amount;
cin >> amount >> N;
for (int i = 0; i < N; i++)
cin >> coin[i];
cout << solve(amount);
return 0;
}
'알고리즘' 카테고리의 다른 글
[백준] 11403 - 경로 찾기 (0) | 2020.03.24 |
---|---|
[백준] 2167 - 2차원 배열의 합 (0) | 2020.03.23 |
[코드업] 5136 - No. X=Y=Z (0) | 2020.03.15 |
[백준] 14889 - 스타트와 링크 (0) | 2020.03.10 |
[백준] 14888 - 연산자 끼워넣기 (0) | 2020.03.09 |