그리디 알고리즘이란?
그리디 알고리즘 (욕심쟁이 알고리즘)이란?
"매 선택에서 지금 이순간 당장 최적의 답을 선택하여, 적합한 결과를 도출하자"라는 모토를 가지는 알고리즘이다.
그리디 알고리즘을 선택하면, 매 선택이 그 순간에 대해서는 최적의답이지만 그걸 종합적으로 확인해보면 최적이라는 보장이 있지 않다.
즉, 한번의 선택이 다음 선택에는 전혀 무관한 값이어야 하며 매 순간의 최적해가 문제에 대한 최적해일 때 사용해야하는 알고리즘
그리디 알고리즘 핵심 이론
그리디 알고리즘 수행과정
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;
}
}
}
}
'알고리즘 & 자료구조 > 알고리즘' 카테고리의 다른 글
이진탐색 (0) | 2024.11.21 |
---|---|
[BFS] 너비 우선 탐색 (1) | 2024.11.18 |
소수 찾기 (0) | 2024.11.16 |
[탐색] 깊이우선탐색 (0) | 2024.11.15 |