그리디(Greedy) 알고리즘
- 다른 용어로 탐욕 알고리즘이라고도 함
- 지금 상황에서 가장 좋은 해결책을 찾는 알고리즘으로 실제 여러 알고리즘 테스트에서도 흔히 볼 수 있는 문제중 하나임
- 여러 조합에 따른 그 해를 찾는 경우가 많고 이때 제시되는 대부분의 조건은 "가장 금액이 큰 순서부터" 라던가 "가장 면적이 큰 타일을 우선적으로"등의 방식에 제시
- 이 알고리즘은 조건이 명확할 때 정확한 답을 찾을 수 있고, 기존의 다른 알고리즘의 지식이 없어도 상식적인 범위에서 코딩이 가능하다.
문제 정의
- 가게에 간 철수는 8370원 어치 물건을 구매하였습니다. 철수에게는 500원짜리 20개 100원짜리 20개 50원짜리 20개 10원짜리 20개의 동전이 있습니다. 철수는 금액을 지불 할 때 단위가 큰 동전부터 지불하려고 합니다. 철수가 지불하게 되는 각 동전의 개수를 구하세요
문제 해결
- 이러한 문제의 경우 철수는 우선 500원짜리 동전부터 사용할 것이다. 간단하게 계산을 해보면 8370 = 500 * 16 + 100 * 3 + 50 * 1 + 10 * 2 가 된다.
- 가장 큰 동전을 이용하여 지불할 수 있는 최대 금액을 지불하고 그 다음 큰 금액의 동전을 지불하는 순서로 구현한다
- 동전의 종류만큼 반복문이 수행된다.
public class GreedyTest {
public static void main(String[] args) {
int[] coins = {500, 100, 50, 10}; //
int price = 8370;
int count;
for (int i = 0; i< coins.length; i++) {
count = 0;
count += price / coins[i];
price = price % coins[i];
System.out.println( coins[i] + "짜리 동전 " + count + "가 필요합니다.");
}
}
}
'알고리즘' 카테고리의 다른 글
특정 범위의 숫자 나열되어 있을 때 각 숫자의 개수를 세어보기 (0) | 2021.12.11 |
---|---|
경우의 수 문제 (Brute-Force Search) (0) | 2021.12.11 |
피보나치 수열 문제 여러 방식으로 해결하기 (0) | 2021.12.09 |
미로 찾기 문제 (0) | 2021.12.07 |
다익스트라(Dijlstra) 알고리즘 (0) | 2021.12.04 |
댓글