실습 - Python/백준
61602 - 동전 0 (Python)
문제
준규가 가지고 있는 동전은 총 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 ->...) 금액을 나누기해서 몫만 산출해나가면 되는 단순한 문제로 보입니다.
풀이
동전의 가치가 큰 수대로 금액을 나누기하여, 사용된 동전의 개수를 산정하였습니다.
동전 값을 배열로 받아, 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 |
댓글