가장 단순하지만 강력한 문제 해결 방법이다.
'탐욕법'이라고 불리기도 한다.
현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미하며 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다!
다익스트라, 플로이드 워셜 알고리즘은 엄밀히 말하자면 그리디 알고리즘으로 분류된다.
그리디 알고리즘 유형은 매우 다양하기 때문에 특이 케이스를 제외하고는 단순 암기를 통해 해결할 수 있는 알고리즘 유형이 아니다. 따라서 많은 유형의 그리디 알고리즘 유형을 접해봐야한다!
기준에 따라 좋은 것을 선택하는 알고리즘이므로 '가장 큰 순서대로', '가장 작은 순서대로'와 같이 기준을 본인이 직접 정해줘야한다.
예시를 통해 그리디 알고리즘을 이해해보자.
위의 문제는 그리디 알고리즘을 이용하여 풀 수 있는 대표적인 문제이다. 해결 방법은 '가장 큰 화폐 단위부터 돈을 거슬러 주는 것' 이다.
- 제일 먼저 N원을 500원부터 거슬러 줄 수 있을만큼 거슬러 준다.
- 그다음 100원을 거슬러 줄 수 있을만큼 거술러 준다.
- 50원 ~ (위와 같다.)
- 10원 ~ (위와 같다.)
위 문제에서의 답은 6개이다. 파이썬 코드로 구현해보았다.
N = 1260
cnt = 0
coin = [500, 100, 50, 10]
for c in coin:
cnt += N // c
N %= c
print(cnt)
그리디 알고리즘을 모든 알고리즘 문제에 적용할 수 있는 것은 아니다. -> 대부분의 문제는 그리디 알고리즘을 이용했을 때 '최적의 해'를 찾을 수 없을 가능성이 크다.
정확한 답을 찾을 수 있다는 보장이 있을 때는 매우 효과적이고 직관적이다. -> 즉, 그리디 알고리즘으로 문제를 풀었을 때는 그 해법이 정당한지 검토해야 한다!!!