본문 바로가기
알고리즘

그리디 알고리즘

by 태풍사랑 2021. 7. 21.

그리디 알고리즘


  • 전체에서 최적 값을 언제나 구할 수 없다는 단점
    • 최초 선택에서 최적의 선택을 통해 **부분 최적해는 구했지만** **전체 문제에서는 최적값을 구하지 못함**
    • 최적해를 가지기 위해 다음 두 조건을 만족해야 한다
      1. 탐욕 선택 속성(Greedy Choice Property)
        • 이전에 선택이 이후에 영향을 주지 않음을 의미
      2. 최적 부분 구조(Optimal Substructure)
    • 일반적으로 그리디임을 증명하려면 수학적 증명이 동반되어야 함
      • 반례를 1개만 찾아도 된다

 

  • ex)거스름 돈 문제
    • 가장 큰 화폐 단위부터 돈을 거슬러 주는 것이 최적의 해 보장하는 이유-> 가지고 있는 동전 중에서 큰 단위가 항상 작은 단위의 배수이므로 작은 단위의 동전들을 종합해 다른 해가 나올 수 없기 때문
n = 1260
count = 0

#큰 단위의 화폐뷰터 차례대로 확인
array = [500, 100, 50, 10]

for coin in array:
  count += n // coin # 해당 화폐로 거슬러 줄 수 있는 도전의 개수 세기
  n %= coin

print(count)

'알고리즘' 카테고리의 다른 글

알고리즘 성능 평가  (0) 2021.07.19
[Java] 백준 1026번 보물  (0) 2020.05.20
[Java] 백준 1890번 점프  (0) 2020.05.19
유클리드 호제법  (0) 2020.05.17
[Java] 백준 2609번 최대공약수와 최소공배수  (0) 2020.05.17

댓글