매 순간 가장 최적의 선택을 하는 방식으로 문제를 해결하는 알고리즘
그리디 알고리즘은 문제를 해결하는 동안 각 단계에서 가장 최적인 선택을 함
그리디 알고리즘은 각 단계에서 최적의 선택을 하지만, 그 선택들이 전체적으로 최적의 해를 보장하지 않음
문제를 작은 하위 문제로 나누고 각 하위 문제를 해결하면서 점진적으로 전체 문제를 해결함
한 번 선택된 값은 변경되지 않으며, 후속 단계에서 그 값을 바꾸지 않음
간단함: 복잡한 사고 과정 없이 현재 상황에서 가장 좋은 선택을 하기 때문에 알고리즘의 구현이 매우 쉽고 직관적임
효율성: 동적 계획법처럼 모든 경우의 수를 고려하지 않고, 한 번의 선택만 하기 때문에 실행 시간이 빠르며 메모리도 적게 사용
최적의 해를 보장하지 않음: 가장 큰 단점은 매 순간의 최적 선택이 최종적으로 전체 문제의 최적 해를 보장하지 못할 수 있다는 점
적용 가능성 제한: 그리디 알고리즘이 항상 최적의 해를 보장하는 문제는 '탐욕적 선택 속성'과 '최적 부분 구조'라는 특정 조건을 만족해야만 함. 이 조건이 충족되지 않는 문제에는 적용하기 어려움.
500원, 100원, 50원, 10원 동전으로 거스름돈 N원을 최소한의 개수로 거슬러주는 방법
N = 1260
count = 0
coin_types = [500, 100, 50, 10]
for coin in coin_types:
count += N // coin # 해당 동전으로 거슬러줄 수 있는 개수
N %= coin # 남은 금액
print(count) # 출력: 6
거스름돈을 줄 때 동전의 개수를 최소화하는 문제
동작 방식
ex) 1260원을 거슬러줘야 할 때, 500원, 100원, 50원, 10원 동전이 있다면, 500원 2개, 100원 2개, 50원 1개, 10원 1개를 주게 됨.
그래프의 모든 노드를 연결하면서 간선 가중치의 합이 최소가 되는 트리를 찾는 문제 (그래프에서 일부 간선을 선택해서 만든 트리)
동작 방식
특정 노드에서 다른 모든 노드까지의 최단 경로를 찾는 문제
동작 방식
데이터 압축에 사용되는 알고리즘으로, 문자의 빈도수를 기반으로 코드를 할당하여 압축률을 높이는 문제
동작 방식