※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2294번 문제인 동전 2이다.
문제는 아래 링크를 확인하자.
2294번: 동전 2
첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주
www.acmicpc.net
이 문제는 주어진 액수의 동전을 개수 제한없이 최대한 적은 개수로 사용하여 목표 금액을 만들어야 한다.
이를 위해, 각 동전이 들어올 때마다 목표금액 이하의 금액들에 대하여 만들 수 있는 최소 동전 개수를 계속 갱신해나가면 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <cmath>
using std::cin; using std::cout;
using std::min;
int total[10001];
int main()
{
int N, K; cin >> N >> K;
int coin, index;
for (int i = 0;i < N;i++) {
cin >> coin; index = 0;
while (index + coin <= K) {
if (total[index] != 0 or index == 0) {
if (total[index + coin] == 0) total[index + coin] = total[index] + 1;
else total[index + coin] = min(total[index] + 1, total[index + coin]);
}
index++;
}
}
if (total[K] == 0) total[K] = -1;
cout << total[K];
return 0;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 1476 // C++] 날짜 계산 (0) | 2021.03.17 |
---|---|
[BOJ 12728 // C++] n제곱 계산 (0) | 2021.03.16 |
[BOJ 11048 // C++] 이동하기 (0) | 2021.03.14 |
[BOJ 11055 // C++] 가장 큰 증가 부분 수열 (0) | 2021.03.13 |
[BOJ 17528 // C++] Two Machines (0) | 2021.03.12 |