백준 11047.동전 0
문제에서는 준규가 가지고 있는 동전의 종류만 가지고 K 금액을 만들려고 할때,
이때 필요한 동전 개수의 최솟값을 구하려고 한다.
문제에서 제시한 조건
1. N개의 줄에 동전의 가치가 오름차순으로 주어진다. 두번째 줄부터 입력되는 동전의 가치는 앞의 동전의 배수이다.
문제 풀이 방법
- 입력 조건 중에 동전의 가치는 오름차순으로 주어지며, 동전의 가치는 앞 동전의 가치의 배수라는 조건이 있기 때문에 그리디 알고리즘으로 문제를 풀 수가 있다.
- 동전의 종류를 입력 받을 때 K원을 초과하는 종류가 나온다면 어차피 사용하지 않을 동전의 가치이므로 입력을 중단하고 코인의 수를 계산하는 코드로 넘어가자.
- 동전의 종류를 내림차순으로 정렬하자. K금액을 지불할 때 동전의 수를 줄이려면 큰 단위의 동전을 많이 사용하는게 좋다.
- 정렬한 coin으로 K 금액을 최대한 지불하고 남은 금액을 남은 동전의 가치로 나누어가자.
- K 금액이 0 원이 되었을 때 코드를 종료하고 동전의 갯수를 반환한다.
파이썬 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import sys def greedy(bank, k): count = 0 bank = list(reversed(bank)) total = k for coin in bank: if total % coin >= 0 and total >= coin: cnt = total // coin count += cnt total -= cnt * coin if total == 0: break return count if __name__ == "__main__": n, k = list(map(int, sys.stdin.readline().strip().split())) bank = [] for i in range(n): coin = int(sys.stdin.readline().strip()) if coin > k: break bank.append(coin) print(greedy(bank, k)) | cs |
#Python Greedy 11047 #백준 11047 #python 백준 11047 #백준 11047 python #백준 11047.동전 0 #11047.동전 0 #백준 11047 동전 0 #백준 동전 0 #백준 동전 0 python #python 백준 동전 0 #파이썬 백준 동전 0 #백준 동전 문제 #백준 동전 0 문제 #백준 그리디 알고리즘 문제 #백준 11047 python #python 백준 11047
'온라인 코딩 테스트 문제 풀이 > 백준 문제 풀이' 카테고리의 다른 글
Python으로 푸는 백준 1758. 알바생 강호 (0) | 2019.02.05 |
---|---|
Python으로 푸는 백준 1946. 신입사원 (0) | 2019.02.04 |
Python으로 푸는 백준 1931. 회의실배정 (1) | 2019.02.01 |
Python으로 푸는 백준 11399. ATM (0) | 2019.01.30 |