현재 상황에서 지금 당장 좋은 것만 고르는 방법
각 단계에서 최적이라고 생각되는 것을 선택해 나가는 방법

탐욕스러운 선택 조건
최적 부분 구조 조건
- 최종 해결 방법은 부분 문제에 대한 문제 해결 방법으로 구성되어야 함
보통 코딩테스트에서 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준을 제시해줌
선택 절차
적절성 검사
해답 검사
<문제>
당신은 음식점의 계산을 도와주는 점원이다. 카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원 짜리의 동전이 무한히 존재한다고 가정한다. 손님에게 거슬러 줘야 할 돈이 N원일 때 거슬러 줘야 할 동전 의 최소 개수를 구하라. 단, 거슬러 줘야 할 돈 N은 항상 10의 배수이다.
풀이
-> 동전의 최소 개수 : 가장 큰 단위의 화폐부터 거슬러 주기

위 문제가 그리디 알고리즘으로 풀린 이유?
시간 복잡도
화폐의 종류가 K라고 할 때, 시간 복잡도는 O(K)
거슬러줘야 하는 금액과는 무관하며 동전의 총 종류에만 영향을 받음
분석
입력
출력
제한 사항
풀이
시간 초과 풀이
def solution(number, k):
number.sort(reverse=True)
count = 0
for i in number:
high = number.index(i) + 1
while high < len(number):
a = i + number[high]
if a > k:
high += 1
elif a <= k:
count += 1
number.remove(number[high])
number.remove(i)
break
count += len(number)
return count
분석
입력
출력
제한 사항
분석
입력
출력
제한 사항
풀이
def solution(number, k):
n = list(number)
count = 0
while count != k:
for i in range(len(n)):
if n[i] < n[i+1]:
n.remove(n[i])
count += 1
break
else:
pass
return ''.join(n)
