실습 - Python/백준

61602 - 동전 0 (Python)

개발참치 2021. 7. 26.

문제

준규가 가지고 있는 동전은 총 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의 배수)

 

예제 입력

10 4200
1
5
10
50
100
500
1000
5000
10000
50000

출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.

 

예제 출력

6

 

분석

그리디 알고리즘의 기본이라고 할 수 있는 문제로 파악됩니다.

동전의 가치가 큰 수대로 ( 50000 -> 10000 ->...) 금액을 나누기해서 몫만 산출해나가면 되는 단순한 문제로 보입니다.

 

풀이

동전의 가치가 큰 수대로 금액을 나누기하여, 사용된 동전의 개수를 산정하였습니다.

 

PyCharm 캡쳐

동전 값을 배열로 받아, reverse로 역순 정렬을 해주고 (큰 수대로)

금액이 남아있는 동안 반복문으로 큰 수대로 금액에서 나누어주어 몫을 계산하고

몫 * 동전의 가치 만큼 빼주고 나머지를 계속 반복문으로 구해나가는 방식으로 풀이하였습니다.

 

소스 코드

import sys

coins_count, money = map(int, sys.stdin.readline().split())
coins = []
count = 0

for i in range(coins_count):
    coins.append(int(sys.stdin.readline()))

coins.reverse()

for coin in coins:
    if money > 0:
        can = money // coin
        count += can
        money -= can * coin

print(count)

 

반례 모음

문제가 단순하여, 반례가 나오기 쉬우므로 반례를 일으키는 입력값들을 산정하여 모아보았습니다.

 

임력

-> 출력


5+065

-> 70


12

-> 12


00000+00000+00000+00000+00000+00000+00000+00000+0

-> 0


0-101-01

-> -102

 

'실습 - Python > 백준' 카테고리의 다른 글

1541 - 잃어버린 괄호 (Python)  (0) 2021.07.26
2212 - 센서 (Python)  (0) 2021.07.26

댓글