참조: https://velog.io/@cyranocoding/%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95Dynamic-Programming%EA%B3%BC-%ED%83%90%EC%9A%95%EB%B2%95Greedy-Algorithm-3yjyoohia5
참조: https://www.youtube.com/watch?v=_IZuE7NIeW4&t=151
가장 숫자가 큰 요소 찾기
해당 예시에서 가장 큰 수는 99이지만, 그리디 알고리즘을 사용한다면, 4 -> 9 -> 12 순으로 현재 시점에 가장 좋은 선택을 하며 진행을 하고, 결국 12라는 결과가 나오게 된다.
이처럼 그리디 알고리즘은 항상 최적의 해의 결과가 나오지 않지만 가장 큰 장점은 계산 속도가 매우 빠르다는 점이다.
서울에서 부산까지 최소 경로로 이동하는 해답을 찾고 있을때, 서울에서 대전까지 경로를 선택하는 것이 대전에서 부산까지 경로를 선택하는 것에 영향을 미치지 않으니 현재 서울에서 대전까지 가는 최소 경로를 선택하면 된다.
위의 예시에서 서울에서 부산까지 가는 경로를 구할때, 서울에서 대전까지 가는 경로 구하기와 대전에서 부산까지 가는 경로구하기로 나눌 수 있다.
백준 예제 11047문제
동전 개수의 최솟값을 출력하는 문제이니 가장 큰 동전부터 나눠 몫을 카운트 해주며 받은 돈이 0이 될 때까지 진행한다.
import sys
input = sys.stdin.readline
N, total = map(int, input().split())
coins = []
for _ in range(N):
coins.append(int(input()))
result = 0
def Exchange():
global result
global total
for i in range(N-1, -1, -1):
if total <= 0:
break
result += total // coins[i]
total = total % coins[i]
Exchange()
print(result)