CS
[Algorithm] 그리디
soom22
2024. 6. 9. 18:15
그리디란?
- 매 순간 최적이라고 생각되는 선택지를 선택하여 값을 구하는 방식
- 눈앞에 결과만 봄
- 주로 문제를 분할 가능한 문제들로 분할한 뒤, 각 문제들에 대한 최적해를 구한 뒤 이를 결합하여 전체 문제의 최적해를 구하는 경우에 주로 사용
어떤 문제를 그리디로 풀어야할까?
다음 두가지 속성을 만족해야 그리디를 적용할 수 있다.
- 탐욕 선택 속성
- 각 단계에서 ‘최선의 선택’을 했을 때 전체 문제에 대한 최적해를 구할 수 있는 경우를 말합니다. 즉, 각 단계에서 가장 이상적인 선택을 하는 것이 전체적으로 최적의 결과를 가져온다는 것입니다.
- 최적 부분 구조
- 전체 문제의 최적해가 ‘부분 문제의 최적해로 구성’될 수 있는 경우를 말합니다. 즉, 전체 문제를 작은 부분 문제로 나누어 각각의 부분 문제에서 최적의 해를 구한 후 이를 조합하여 전체 문제의 최적해를 구하는 것을 의미합니다.
💡 그리디와 dp의 차이
dp의 속성은
1.겹치는 부분 문제
: 동일한 작은 문제들이 반복하여 전체의 문제와 겹친다.
2.최적 부분 구조
: 부분 문제의 최적결과가 전체에도 그대로 적용되어야 한다.
dp는 문제가 겹쳐서 이전 문제가 다음 문제에 영향을 끼치지만, 그리디는 영향 x
그리디 문제를 해결하는 방법
💡 선택 절차(Selection Procedure)란?
- 이 단계에서는 ‘현재 상태’에서 ‘최적인 선택’을 합니다.
이 선택은 이후에는 바뀌지 않습니다.
💡 적절성 검사(Feasibility Check)란?
- 이 단계에서는 선택한 항목이 ‘문제의 조건’을 만족시키는지 확인합니다.
조건을 만족시키지 않으면 해당 항목은 제외됩니다.
💡 해답 검사(Solution Check) 란?
- 이 단계에서는 모든 선택이 완료되면, ‘최종 선택’이 ‘문제의 조건을 만족’시키는지 확인합니다.
조건을 만족시키면 해답으로 인정됩니다.
그리디 문제
그리디의 대표적인 문제로는 한화 거스름돈 문제!
거스름돈 문제
- 선택 절차
- 가장 큰 동전부터 선택
- 적절성 검사
- 현재 동전 > 남은 거스름돈 일 경우에는 다음으로 큰 동전 선택
- 해답 검사
- 사용한 동전의 합이 거스름돈과 일치하면 해답 도출 완료!
💡 여기서 주의할 점은 한국 동전만 그리디로 풀고 센트는 dp로 풀어야 한다!
- 한국 동전은 배수로 이루어졌지만 센트는 아니라서 그리디로 풀게 된다면 나누어 떨어지지 않을 수 있음
주유소 문제
- 선택 절차
- 한 블럭씩 비교하여 가장 저렴한 주유소를 minCost에 갱신한다.
- 첫 도시에서는 주유를 무조건 해야한다.
- minCost * 다음까지의 거리
- 적절성 검사
- minCost > 현재 기름값일 경우 minCost를 갱신한다.
- 해답 검사
- 최소를 찾는 문제라 여기선 해답검사 x