그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식
그리고, 그것을 선택했을 때 최적의 해를 구할 수 있어야 한다 (정당성 분석 필요)
ex) 다익스트라 알고리즘(최단 경로 문제), 허프만 코딩 알고리즘(허프만 트리를 빌드할 때 그리디 알고리즘을 사용)
각 단계마다 로컬 최적해를 찾는 문제로 접근해 문제를 더 작게 줄여나가는 형태
하위 문제에 대한 최적의 솔루션을 찾은 다음, 이 결과들을 결합한 정보에 입각해 전역 최적 솔루션에 대한 선택
배낭 문제
동전 바꾸기 문제
가장 큰 합
def maxProfit(prices: List[int]) -> int:
result = 0
for i in range(len(prices) - 1):
if prices[i] < prices[i + 1]:
result += prices[i + 1] - prices[i]
return result
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
heap = []
# 키 역순, 인덱스 삽입
for person in people:
heapq.heappush(heap, (-person[0], person[1]))
print(heap)
result = []
while heap:
person = heapq.heappop(heap)
result.insert(person[1], [-person[0], person[1]])
return result