https://www.acmicpc.net/problem/11047
그리디 알고리즘은 매 순간마다 가장 유리한 경우를 선택하는 방식으로 풀어야 한다. -> 동적계획법과 비교됨
-> M보다 가치가 작은 동전 중 가장 큰 가치값을 가진 동전으로 빼는 전략
꼭 생각!!!! 예제 입력값은 일부러 좁은 입력값 범위만 제공해줄 가능성이큼! 보통 극한의 경우 완전 입력값이 적을떄, 많을떄, 여사건의 경우를 생각하는게 좋다.
import sys
inputNM= sys.stdin.readline().split(" ")
N=int(inputNM[0])
M=int(inputNM[1])
inputLs= []
for i in range(N):
inputNum = int(sys.stdin.readline())
inputLs.append(inputNum)
for i in range(N):
if inputLs[i] > M:
index = i-1
break
elif i == N-1:
index = N-1
count =0
while M >0 :
if inputLs[index] > M:
while inputLs[index] >M:
index-=1
divider = M// inputLs[index]
M-= divider * inputLs[index]
count+=divider
print(count)