문제
https://www.acmicpc.net/problem/11047
11047번: 동전 0
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
www.acmicpc.net
풀이
n,k = map(int,input().split())
arr = []
cnt=0
for _ in range(n):
arr.append(int(input()))
for i in sorted(arr,reverse=True):
if k >= i :
cnt+=k//i
k=k%i
print(cnt)
그리디 알고리즘으로 풀면된다.
뒷 일은 생각하지 않고 현재 가장 좋은 방법으로 푸는 방식이다.
동전의 가치가 큰 것들로 이뤄져야지 동전 개수가 최소가 된다.
그렇기 때문에 동전의 가치를 내림차순으로 정렬해준다.
정렬된 동전의 가치를 순회하면서, 가지고 있는 돈이 동전의 가치보다 크다면 그 동전을 사용할 수 있다.
가지고 있는 돈을 동전의 가치로 나눈 몫이 동전의 개수가 되고 나머지가 남은 돈이된다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #13305 - 주유소 (0) | 2022.01.18 |
---|---|
[Python] 백준 #1541 - 잃어버린 괄호 (0) | 2022.01.18 |
[Python] 백준 #1931 - 회의실 배정 (0) | 2022.01.16 |
[Python] 백준 #11725 - 트리의 부모 찾기 (0) | 2022.01.15 |
[Python] 백준 #3273 - 두 수의 합 (0) | 2022.01.14 |