11047. 동전 0


문제

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.

동전을 적절히 사용해서 그 가치의 합을 K로 만드려고 한다. 이 때 필요한 동전 개수의 최소값을 구하는 프로그램을 작성하시오.


입력

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)

둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)


출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최소값을 출력한다.


1. 접근


그리디 알고리즘. 


2. 풀이


가장 큰 액수의 동전들을 최대한으로 써가면서 K원을 만든다.


3. 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
using namespace std;
 
int n, k, i;
int coin[10];
 
int main() {
    scanf("%d %d"&n, &k);
    for (i = 0; i < n; ++i)
        scanf("%d"&coin[i]);
 
    int cnt = 0;
    for (i = n - 1; i >= 0--i) {
        cnt += k / coin[i];
        k %= coin[i];
    }
    printf("%d", cnt);
    return 0;
}
cs


'알고리즘 > Greedy 그리디' 카테고리의 다른 글

백준) 1931 회의실배정  (0) 2017.07.25
백준) 1946 신입 사원  (0) 2017.07.25
백준) 1744 수 묶기  (0) 2017.07.24
백준) 4796 캠핑  (0) 2017.07.23
그리디 알고리즘 도입  (0) 2017.07.23

+ Recent posts