[백준] 11047 동전 0

백준 11047 동전 0

문제

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

동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다.

이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.

입력

  • 첫 번째 줄: n, k
  • 두 번째 줄 ~: 동전의 가치

출력

K원을 만드는데 필요한 동전 개수의 최솟값

해결 방식

greedy 알고리즘

  • 입력받은 동전의 가치를 내림차 순으로 정렬
  • 가장 큰 금액의 동전으로 k를 구성함

예시

k = 4200

coins = [1, 5, 100, 1000, 5000]

  1. 역순으로 정렬
    • coins = [5000, 1000, 100, 5, 1]
  2. 5000원으로 구성?
    • k // 5000 = 0
    • k % 5000 = 4200
    • 0개, 남은 돈 4200원
  3. 1000원으로 구성?
    • k // 1000 = 4
    • k % 5000 = 200
    • 4개, 남은 돈 200원
  • 이와 같은 과정 반복
  • 결과: 6

코드

n, k = map(int, input().split())
coins = list(int(input()) for _ in range(n))
coins.sort(reverse=True)

result = 0

for coin in coins:
    result += k // coin
    k = k % coin

print(result)

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus