- 현재 상황에서 지금 당장 좋은 것만 고르는 방법 (매 순간 좋아 보이는 것을 선택)
- 사전에 외우고 있지 않아도 풀 수 있을 가능성이 높은 문제 유형
- 창의력, 즉 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구
- 정렬 알고리즘과 짝을 이룸
- 대부분의 문제는 그리디 알고리즘을 이용했을 때 '최적의 해'를 찾지 못함
- 문제 풀이를 위한 최소한의 아이디어를 떠올리고 그것이 정당한지 검토할 수 있어야 함
그리디 알고리즘은 단순하지만 강력한 문제 해결 방법이다. 탐욕법으로 불리기도 한다.
이름에서 알 수 있듯이 어떠한 문제가 있을 때 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘이다.
여기서 탐욕적이라는 말은 '현재 상황에서 지금 당장 좋은 것만 고르는 방법'을 의미한다.
그리디 알고리즘을 이용하면 매 순간 가장 좋아 보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않는다.
그리디 알고리즘은 기준에 따라 좋은 것을 선택하는 알고리즘이므로 문제에서 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준을 알게 모르게 제시해준다.
대체로 이 기준은 정렬 알고리즘을 사용했을 때 만족시킬 수 있으므로 그리디 알고리즘 문제는 자주 정렬 알고리즘과 짝을 이뤄 출제된다.
그리디 알고리즘을 모든 알고리즘 문제에 적용할 수 있는 것은 아니다. 대부분의 문제는 그리디 알고리즘을 이용했을 때 '최적의 해'를 찾을 수 없을 가능성이 다분하다. 하지만 탐욕적으로 문제를 접근했을 때 정확한 답을 찾을 수 있다는 보장이 있을 때는 매우 효과적이고 직관적이다.
그리디 알고리즘으로 문제의 해법을 찾았을 때는 그 해법이 정당한지 검토해야 한다.
대부분의 그리디 알고리즘 문제에서는 이처럼 문제 풀이를 위한 최소한의 아이디어를 떠올리고 이것이 정당한지 검토할 수 있어야 답을 도출할 수 있다.
어떤 문제를 만났을 때, 바로 문제 유형을 파악하기 어렵다면 그리디 알고리즘을 의심하고, 문제를 해결할 수 있는 탐욕적인 해결법이 존재하는지 고민해보자.
만약 오랜 시간 고민해도 그리디 알고리즘으로 해결 방법을 찾을 수 없다면, 그때는 다이나믹 프로그래밍이나 그래프 알고리즘 등으로 문제를 해결할 수 있는지를 재차 고민해보는 것도 한 방법이다.
'개발 > 알고리즘' 카테고리의 다른 글
[알고리즘] 다이나믹 프로그래밍 (동적 계획법) (Dynamic Programming) (0) | 2021.10.22 |
---|---|
[알고리즘] 이진 탐색 (Binary Search) (0) | 2021.10.21 |
[알고리즘] 선택, 삽입, 퀵, 계수 정렬 (Selection, Insertion, Quick, Count sort) (0) | 2021.10.20 |
[알고리즘] 깊이 우선 탐색 / 너비 우선 탐색 (DFS / BFS Algorithm) (0) | 2021.10.19 |
[알고리즘] 구현 알고리즘 (Implementation Algorithm) (0) | 2021.10.18 |