백준 단계별로 풀어보기 [그리디 알고리즘] 동전 0
https://www.acmicpc.net/problem/11047
[풀이]
n개의 종류의 동전을 적절히 이용해서 가치의 합이 k가 되게하는 최소 동전의 개수를 구하는 문제이다. 오름차순으로 동전의 가치값을 입력했고, 최소 개수를 구하기 위해서는 가장 큰 가치값부터 시작해서 k를 채워나가면 된다. 따라서 그리디 알고리즘에 해당하고, k / val[n-1] 을 하여 k를 만들 수 있는 동전 개수 cnt를 가장 가치값이 큰 값부터 몇 개씩 이용 가능한지 구해 합해나갔다. k -= val[n-1] * c 로 k의 값이 0이 될 때까지 반복문을 돌려 구한다.
[코드]
#include <iostream>
#include <algorithm>
int main() {
int n, k, cnt = 0;
std::cin >> n >> k;
int* val = new int[n];
for (int i = 0; i < n; i++) {
std::cin >> val[i];
}
int c;
while (k != 0) {
c = k / val[n-1];
cnt += k / val[n - 1];
k -= val[n - 1] * c;
n--;
}
std::cout << cnt;
delete[] val;
return 0;
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[c++] 백준 15650, 15651, 15652 N과 M (2), (3), (4) (0) | 2021.07.21 |
---|---|
[c++] 백준 15649 N과 M (1) (0) | 2021.07.20 |
[c++] 백준 11399 ATM (0) | 2021.07.19 |
[c++] 백준 1427 소트인사이드 (0) | 2021.07.19 |
[c++] 백준 1436 영화감독 숌 (0) | 2021.07.19 |