그리디 알고리즘 (Greedy Algorithm) 설명:
그리디 알고리즘은 매 선택의 시점에서 현재 가장 최적인 해결책을 선택하는 방식으로 문제를 해결하는 알고리즘입니다. 이 알고리즘은 항상 최적의 결과를 보장하지는 않지만, 특정 문제들에서는 효율적이고 정확한 답을 제공할 수 있습니다.
그리디 알고리즘의 기본 원칙:
그리디 알고리즘의 대표적인 예시:
장점:
단점:
문제:
당신은 상점의 계산대에서 일하고 있습니다. 고객이 지불한 금액이 주어지고, 당신은 그 고객에게 거스름돈으로 주어진 화폐 단위 중에서 가장 적은 수의 화폐로 거슬러 주어야 합니다. 예를 들어, 거스름돈이 126원이고 화폐 단위가 [100, 50, 10, 5, 1]인 경우에는 100원 1개, 10원 2개, 5원 1개, 1원 1개, 총 5개의 화폐로 거슬러 줄 수 있습니다.
요구 사항:
1. 거스름돈의 액수와 사용 가능한 화폐의 단위가 주어집니다.
2. 거슬러 줄 수 있는 화폐의 최소 개수를 구하세요.
JavaScript로의 구현:
function minimumCoinsForChange(total, coins) {
coins.sort((a, b) => b - a); // 화폐 단위를 큰 순서대로 정렬
let count = 0;
for (let coin of coins) {
count += Math.floor(total / coin); // 해당 화폐로 얼마나 거슬러 줄 수 있는지 계산
total %= coin; // 남은 거스름돈 계산
}
return count;
}
const total = 126;
const coins = [100, 50, 10, 5, 1];
console.log(minimumCoinsForChange(total, coins)); // 출력: 5
이 예제에서는 가장 큰 화폐 단위부터 시작하여 가능한 한 많은 화폐로 거슬러 주는 그리디 방식을 사용합니다. 이 방법은 주어진 화폐 단위들이 작은 단위의 배수일 경우에 항상 최적의 해를 찾을 수 있습니다.
그리디 알고리즘은 문제의 구조를 잘 파악하고 그리디 방식이 최적의 해를 보장하는지 확인해야 사용할 수 있습니다. 문제에 따라서 그리디 방식이 최적의 해를 찾지 못할 때도 많으므로, 항상 그리디가 최적의 방법론이라고 단정짓기 어렵습니다.