거북이의 기술블로그 2024. 11. 26. 11:06

그리디 알고리즘이란?

그리디 알고리즘 (욕심쟁이 알고리즘)이란?
"매 선택에서 지금 이순간 당장 최적의 답을 선택하여, 적합한 결과를 도출하자"라는 모토를 가지는 알고리즘이다.
그리디 알고리즘을 선택하면, 매 선택이 그 순간에 대해서는 최적의답이지만 그걸 종합적으로 확인해보면 최적이라는 보장이 있지 않다.

즉, 한번의 선택이 다음 선택에는 전혀 무관한 값이어야 하며 매 순간의 최적해가 문제에 대한 최적해일 때 사용해야하는 알고리즘

 

그리디 알고리즘 핵심 이론

그리디 알고리즘 수행과정

1. 해 선택 : 현재 상태에서 가장 최선이라고 생각되는 해를 선택
2. 적절성 검사 : 현재 선택한 해가 전체 문제의 제약조건에 벗어나지 않는지 검사
3. 해 검사 : 현재까지 선택한 해 집합이 전체 문제를 해결할 수 있는지 검사한다.
(전체문제를 해결하지 못한다면 다시 1번으로 돌아가 같은 과정을 반복한다)

 

구현

거스름돈을 주는 간단한 예제
 (큰 단위의 금액부터 먼저 거슬러줌) -> 최적해
public class App {
    public static void main(String[] args) throws Exception {
        int[] coins = {500, 100, 50, 10};

        int totalCost = 1230;
        int paid = 2000;

        int change = paid - totalCost;
        if(change < 0 ){
            System.out.println("금액이 부족");
            return;
        }

        for (int coin : coins){
            if(change >= coin){
                int count = change/coin;
                System.out.println(coin+ "거스름 : " + count + " 개");
                change = change%coin;
            }
        }   

    }
}