✔️ 그리디 알고리즘(탐욕법) 정의
그리디 알고리즘(Greedy Algorithm) 이란?
최적의 값을 구해야 하는 상황에서, 각 단계에서 최적이라고 생각 되는 것을 선택해 나가는 알고리즘 입니다.
그리디 알고리즘은 각 단계마다 지역 최적의 해를 찾는 문제로, 문제를 더 작게 쪼개는 형태이다.
➕ 언제 쓰는가?
최적해를 구하는 문제 !!
✔️ 그리디 알고리즘으로 문제 해결하기
- 선택 절차(Selection Procedure) : 현재 상태에서의 최적 해답을 선택한다.
- 적절성 검사(Feasibility Check) : 선택된 해가 문제의 조건을 만족하는지 검사한다.
- 해답 검사(Solution Check) : 문제가 해결되었는지 확인하고, 해결되지 않았다면 선택 절차로 되돌아간다.
✔️ 대표적인 문제
백준 5585번 - 거스름돈
타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.
만약, 주어진 가격이 380엔이라면 다음과 같은 순서로 문제를 풀 수 있다.
- 최소 개수의 동전을 거슬러 받기 위해 가장 큰 화폐 단위부터 돈을 거슬러 준다.
- 500엔으로 거슬러 줄 수 있는 돈은 500엔으로 1개이고 남은 돈은 120엔이다.
- 남은 돈에서 100엔으로 거슬러 줄 수 있는 돈은 100엔으로 2개이고 남은 돈은 20엔이다.
- 마지막으로 10엔으로 거슬러 줄 수 있는 돈은 10엔으로 1개이고 남은 돈은 0원이다.
- 따라서 동전의 최소 개수는 1+2+1인 4가 된다.
// 거슬러 주어야 할 돈
int n = 620;
// 동전의 개수를 셀 count
int count = 0;
// 거스름 돈의 종류를 담은 배열
int[] type = {500, 100, 50, 10, 5, 1};
for (int i = 0; i < type.length; i++) {
// 500엔 부터 거슬러 줄 수 있는 동전의 개수 세기
count += n / type[i];
n %= type[i];
}
출처: https://ittrue.tistory.com/196 [IT is True:티스토리]
✔️문제 풀이 리스트
[알고리즘 문제 풀이] 백준 11047: 동전 0 (자바) : 그리디 알고리즘
✔️ 문제 설명문제준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값
cse-gr.tistory.com
[알고리즘 문제 풀이] 백준 1931 회의실 배정 (자바) : 그리디 알고리즘 [중]
✔️ 문제 설명문제한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹
cse-gr.tistory.com
[알고리즘 문제 풀이] 백준 11399 ATM(자바) : 그리디 알고리즘 [하]
✔️ 문제 설명 더보기 문제인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는
cse-gr.tistory.com
[알고리즘 문제 풀이] 백준 1080 행렬 (자바) : 그리디 알고리즘
✔️문제 설명 ( 펼치기 ) 더보기문제0과 1로만 이루어진 행렬 A와 행렬 B가 있다. 이때, 행렬 A를 행렬 B로 바꾸는데 필요한 연산의 횟수의 최솟값을 구하는 프로그램을 작성하시오.행렬을 변환
cse-gr.tistory.com
# 참고 문헌
https://hongcana.tistory.com/41
https://jellili.tistory.com/23
https://ittrue.tistory.com/196
'Coding Test > 알고리즘 정리' 카테고리의 다른 글
[알고리즘] 이분탐색(Binary Search)이란? (1) | 2024.10.02 |
---|---|
[알고리즘] 백트래킹이란? & 대표 문제: 백준 15679 N과M(1) - 자바 (0) | 2024.10.01 |
[알고리즘] LIS : Longest Increasing Subsequnce 알고리즘 - DP 활용(최장 증가 부분 수열) (3) | 2024.08.28 |
[알고리즘 정리] DP(Dynamic Programming) : 동적 계획법 (1) | 2024.08.24 |