본문 바로가기
백준(Python) 풀이

백준 11047번. 동전 0 (Python / 파이썬)

by yewonnie 2022. 4. 11.

문제

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

문제 풀이

N종류의 동전을 각각 매우 많이 가지고 있을 때, 가치의 합을 K로 만들기 위해

필요한 동전 개수의 최솟값을 구하는 문제입니다.

 

만약 가지고 있는 동전이 가치의 합 K보다 크다면 

해당 동전은 K를 만들 수 없습니다.

따라서, 주어진 동전이 가치의 합보다 작거나 같다면,

K를 동전으로 나눈 몫을 동전의 개수로 count 해줍니다.

또한 K를 동전으로 나눈 나머지를 새로운 K의 값으로 갱신해줍니다.

 

이 과정을 모든 동전에 대해 반복하면 필요한 동전 개수의 최솟값을 구할 수 있습니다.


My Code

n, k = map(int,input().split()) # 동전 종류 수, 가치의 합

coins = []
for _ in range(n):
    coins.append(int(input())) # 동전의 가치 (오름차순)

coins.reverse() # 내림차순으로 뒤집음

count = 0 # 동전의 개수를 count할 변수
for coin in coins:
    if coin <= k: # 주어진 동전이 가치의 합보다 작거나 같으면
        count += k // coin # 나눈 몫을 count
        k %= coin          # 나눈 나머지를 가치로 갱신

print(count)

댓글