모눈종이에 사각사각

그리디 알고리즘(Greedy, 탐욕법) 본문

Algorithm

그리디 알고리즘(Greedy, 탐욕법)

모눈종이씨 2021. 9. 10. 13:30

이번 포스팅에서는 그리디 알고리즘에 대해 알아보고자 한다.

 

그리디 알고리즘은 현재 상황에서 지금 당장 좋은 것만 고르는 방법이다.

매 순간 가장 좋아보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향은 고려하지 않는다.

 

따라서 그리디 해법은 그 정당성 분석이 중요하다. 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토해야 한다.

🍀 거스름 돈 문제

거스름 돈으로 사용할 돈은 500원, 100원, 50원, 10원짜리 동전이 무한히 존재한다. 손님에게 거슬러 줘야 할 돈이 N원일 때, 거슬러 줘야 할 동전의 최소 개수를 구하라.

단, 거슬러 줘야 할 돈 N은 항상 10의 배수이다.

-> 그리디 알고리즘을 활용해 풀 수 있는 대표적인 문제

🍀 정당성 분석

그리디 알고리즘을 모든 알고리즘 문제에 적용할 수 있는 것은 아니다. 그리디 알고리즘으로 해법을 찾았을 때는 그 해법이 정당한지 검토해야 한다. 

거스름돈 문제를 그리디 알고리즘으로 해결할 수 있는 이유 :

가지고 있는 동전 중에서 큰 단위가 항상 작은 단위의 배수이므로 작은 단위의 동전들을 종합해 다른 해가 나올 수 없기 때문

예) 800원을 거슬러 줘야 할 때 화폐 단위가 500원, 400원 100원이 있다고 하자. 만약 그리디 알고리즘으로 풀면 

=> 이처럼 그리디 알고리즘은 정당한지 검토할 수 있어야함.

 

* 다익스트라 최단 경로 알고리즘과 크루스칼 알고리즘도 모두 그리디 알고리즘에 속한다.


📚 참고 : 이것이 취업을 위한 코딩테스트다 with 파이썬

 

'Algorithm' 카테고리의 다른 글

다이나믹 프로그래밍(Dynamic Programming, DP, 동적계획법)  (0) 2022.02.18
최단 경로(Shortest Path) 알고리즘  (0) 2021.09.16
이진 탐색, 이진 탐색 트리  (0) 2021.09.12
정렬 (Sorting)  (0) 2021.09.12
DFS/BFS  (0) 2021.09.11
Comments