자기개발👨‍💻/코딩 알고리즘

[Python] 백준 2559 수열 - 그리디 알고리즘

천숭이 2023. 10. 24. 01:09

문제 : https://www.acmicpc.net/problem/11047

 

예제입력:

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

 

예제출력:

6

import sys
input = sys.stdin.readline

N, K = map(int, input().split())
coins = [int(input()) for _ in range(N)]
coins.reverse()

re = 0
for coin in coins :
    re += K // coin
    K = K % coin

print(re)

- 오름차순으로 주어지는 동전을 리스트에 담고 reverse함수를 이용해 역순으로 정렬시킨다

- 정렬된 리스트내부를 순회하며 입력받은 돈을 순회한 값으로 나눈 몫을 result 변수에 더한다

   -> 나눠지지 않으면 0이 더해진다

- 그러고 K는 순회한 값의 나머지로 대입시킨다

   -> 입력받은 돈의 값보다 작아지면 그제서야 나눠지고, 나눠진 값을 K에 재대입