백준 알고리즘

[C언어] 백준 11047번 동전 O 문제

컴공코딩러 2019. 1. 24. 18:41


https://www.acmicpc.net/problem/11047



문제

준규가 가지고 있는 동전은 총 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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>

void min_coin()
{
    int i, j;
    int N, M;
    int *arr;
    int cnt = 0;
    scanf("%d %d"&N, &M);
    arr = (int*)malloc(sizeof(int)*N);
    for (i = 0; i < N; i++)
        scanf("%d"&arr[i]);
 
    for (i = 0; i < N; i++)
    {
        cnt += M / arr[N - i - 1];
        M %= arr[N - i - 1];
    }
    printf("%d", cnt);
    free(arr);
    
}
int main()
{
    min_coin();
}
cs


greedy 탐색방법이다.

큰값부터 탐색하니 항상 최선의값을 선택하진못함.

에전에 자바 중간고사 문제중에서 나왔었던거같다.