
아래 두 가지 조건을 만족하면 그리디 알고리즘을 사용하여 최적해를 도출할 수 있다.
거스름돈으로 사용할 수 있는 500원, 100원, 50원, 10원짜리 동전이 무한이 존재한다고 가정한다.
손님에게 거슬러 줘야 할 돈이 1260원일 때 거슬러 줘야 할 동전의 최소의 개수를 구하여라.
그리디 알고리즘을 이용해 풀어보면, 가장 큰 화폐 단위부터 돈을 거슬러 주면 된다.
가장 먼저 500원으로 거슬러 줄 수 있을 만큼 거슬러주고, 100 -> 50 -> 10원짜리 동전을 차례대로 거슬러 줄 수 있을 만큼 거슬러 주면 최소의 동전 개수로 모두 거슬러 줄 수 있다.
public class CoinChange {
// 동전 종류를 상수로 정의
private static final int[] COIN_TYPES = {500, 100, 50, 10};
public static void main(String[] args) {
int amount = 1260; // 거스름돈 총액
System.out.println("Minimum coins needed: " + calculateMinimumCoins(amount));
}
private static int calculateMinimumCoins(int amount) {
int count = 0;
for (int coin : COIN_TYPES) { // 500, 100, 50, 10
count += amount / coin;
amount %= coin;
}
return count;
}
}
| Coin Type | Count |
|---|---|
| 500원 | 2개 |
| 100원 | 2개 |
| 50원 | 1개 |
| 10원 | 1개 |
ref.
https://velog.io/@falling_star3/%EA%B7%B8%EB%A6%AC%EB%94%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Greedy-Algorithm
https://choiyeonho903.tistory.com/65