본문 바로가기

백준

11047)동전 0

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


문제를 풀어도 개운치가 않아서 다른 풀이를 찾아봤다.


어떻게 하면 이런 생각을 할 수 있을지 의문이 들면서


내가 솔루션을 찾는 방식을 되돌아 볼 필요성을 느꼈다.


4790원이 주어진다. 10종류의 동전을 최소한으로 사용해 4790원을 만들 때 사용된 동전 갯수를 찾아야 한다.


1.동전 배열에서 K = 4200원을 만들기 위한 가장 큰 동전을 찾는다.(1000원)


2.그 동전으로 K = 420790을 나눈 몫을 합산한다.(동전의 갯수 저장)


3.그 동전으로 나눈 나머지로 K를 갱신한다. (K = 200)


4.1000원보다 작은 동전이 되게끔 인덱스를 하나 감소시킨다.


K를 나타낼 수 있는 최대 크기의 동전을 찾으면 나머지 돈들은 그 이하의 동전들로 표현할 수 있다.


1000원보다 작은 동전은 500원인데 500원으로 200을 나눈 몫은 0이고 나머지는 200이다.


그래서 최대 크기의 동전을 찾고난 후 동전 크기를 차례대로 줄여가며 위 과정을 반복해도


문제를 해결하는데 지장이 없다.


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
28
29
30
#include<stdio.h>
 
int main() {
    int N, K;
    int *coin;
    int count = 0;
    int tempIndex = 0;
 
    scanf("%d %d"&N, &K);
    coin = (int *)malloc(sizeof(int)*N);
 
    for (int i = 0; i < N; i++) {
        scanf("%d"&coin[i]);
    }
 
    for (int i = 0; i < N; i++) {
        if (coin[i] <= K) {
            tempIndex = i;
        }
    }
 
    while (K > 0) {
        count += K / coin[tempIndex];
        K = K % coin[tempIndex];
        tempIndex--;
    }
    printf("%d\n", count);
 
    return 0;
}
cs


'백준' 카테고리의 다른 글

5612)터널의 입구와 출구  (0) 2019.02.06
3054)피터팬 프레임  (0) 2019.02.06
1003)피보나치 함수  (0) 2019.02.04
3023)마술사 이민혁  (0) 2019.02.04
2033)반올림  (0) 2019.02.04