Algorithm/백준(BOJ)

[Python] 11047 - 동전 0

Gr00t 2021. 1. 6. 00:05

문제

준규가 가지고 있는 동전은 총 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원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.


풀이

  • 전형적인 그리디 알고리즘 문제
  • 각 동전이 오름차순으로 주어지며 배수의 관계를 이룬다.

    ⇒ 큰 동전부터 빼면서 세주면 된다.

import sys

input = sys.stdin.readline


def coin0(price, coins):
    count = 0
    for coin in reversed(coins):
        if price >= coin:
            quotient = (price // coin)
            price -= quotient * coin
            count += quotient
    return count


if __name__ == '__main__':
    N, K = map(int, input().split())
    values = [int(input()) for _ in range(N)]
    mincnt = coin0(K, values)
    print(mincnt)

'Algorithm > 백준(BOJ)' 카테고리의 다른 글

[Python] 10610 - 30  (0) 2021.01.06
[Python] 2875 - 대회 or 인턴  (0) 2021.01.06
[JAVA] 10950 - A+B - 3  (0) 2021.01.04
[JAVA] 2588 - 곱셈  (0) 2021.01.04
[JAVA] 1000 - A+B  (0) 2021.01.04