눈 앞의 가장 큰 이익만을 좇는 방법이다.
성질이 동일하게 보존
되므로 아까 했던 전략을 계속 취해도 정답을 얻을 수 있다.
문제를 딱 보고 그리디인지 알기가 쉽지 않다.
👉 풀이 : 가장 큰 금액의 동전을 사용할 수 있는 최대개수를 무조건 다 사용하는 것!
왜 이게 성립할까??
반드시 큰 쪽은 작은 쪽 액수의 배수
이기 때문
작은 동전들이 많이 있을 때, 이를 모아 큰 동전을 만들 수 있다면 무조건
바꿔주는 게 이득!
-> 저 배수라는 성질이 성립하지 않으면 이 성질도 깨진다.
-> 그리디도 더 이상 사용 불가!
만약 60, 50, 10원 동전을 사용한다고 해보면, 60은 50의 배수가 아니다.
220원을 표현하려고 할 때, 60원
짜리부터 무작정 최대로
사용하게되면
60 3, 50 0, 10 4 ==> 총 7개
하지만,
60 0, 50 4, 10 2 = 20 ==> 총 6개 얘가 더 좋네?
60원을 최대한 많이 사용한다해서 좋은 게 아니죠?? -> 그리디 기법 불가!!
문제의 성질이 동일하게 보존되고, 같은 전략을 반복적으로 취할 수 있는 것이 그리디 알고리즘의 특징.
즉, 일반화가 가능하다는 소리인 듯
현재 A
지점에 서 있다고 해보자. A
에서 최대 높이에 다다르려 한다.
m
은 loacl maximum
이다. 그 근처 지역에 한해서는 가장 이득이지만, 전체 중에서는 최적해가 아닐 수 있다.
M
은 global maximum
이다. 전체에서 최적해를 의미한다. global maximum
또한 local maximum
이다. 그러나 전체상황을 모르는 A의 입장에서는 어딘가 도착해도 그게 글로벌인지, 로컬 최적해인지 판단하기 어렵다.
이런 상황에서 그리디를 적용한다면?
A
의 위치에서 m
으로 가는길은 경사가 45도
보다 커보이고, M
으로 가는 길은 당장 보기엔 기울기가 0
에 가깝기 때문에m
으로 가버린다.
-> 최적해 찾기 실패
그러면 왜 중요해?
그리디는 다른 복잡하지만 최적해를 뽑아내는 것
들에 비해 비용이 적은 경우가 많다.
풀이가 대부분 가장 큰~
, 가장 긴~
, 가장 빠른~
부터 뭔가 해나가라는 것이다보니 정렬기술은 필수다.
🟠II 5585 거스름돈
🟠I 2839 설탕 배달
🟠I 2828 사과 담기 게임
🔘V 1789 수들의 합
🔘V 4796 캠핑
🔘II 11047 동전 0
🔘II 1541 잃어버린 괄호
🔘III 1449 수리공 항승
🔘II 2138 전구와 스위치
🔘III ATM
🔘II 회의실 배정
🟡III 과제
🟡I 멀티탭 스케줄링