백준 11047 : 동전 0
문제 링크
문제 내용
준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.
동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.
(단, 동전은 1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
Idea
그리디 알고리즘(Greedy Algorithm)을 활용하여 풀었다.
이 문제의 알고리즘은 다음과 같다.
- money가 0이면 종료
- money가 coin[i]보다 크거나 같으면 money -= coin[i]
- coin이 money보다 크다면 다음 동전으로
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <stdio.h>
#include <stdlib.h>
int main() {
int N, K;
scanf("%d %d", &N, &K);
//동전의 가치 입력
int* coin = (int*)malloc(sizeof(int) * N);
for (int i = N-1; i >= 0; i--)
scanf("%d", &coin[i]);
//동전의 최소 개수 구하기
int cnt = 0, idx = 0;
while (K > 0) {
if (K >= coin[idx]) {
K -= coin[idx];
cnt++;
}
else idx++;
}
//결과 출력
printf("%d\n", cnt);
free(coin);
return 0;
}
|
cs |
'백준 Baekjoon' 카테고리의 다른 글
[C언어] 백준 2749 : 피보나치 수 3 (0) | 2020.10.10 |
---|---|
[C언어] 백준 9471 : 피사노 주기 (0) | 2020.10.09 |
[C언어] 백준 16926 : 배열 돌리기 1 (0) | 2020.09.29 |
[C++] 백준 2346 : 풍선 터뜨리기 (0) | 2020.09.25 |
[C언어] 백준 5585 : 거스름돈 (0) | 2020.09.22 |