Algorithm/그리디

[알고리즘 유형 / Python] 그리디 이론

베이비코더 2022. 1. 8. 18:06
반응형

그리디(Greedy) 알고리즘은 지금 이 순간, 지금 당장, 최적의 답을 찾는 방법이라고 한다.

지금 당장에서는 최적의 방법이지만 나중과 종합적으로 봤을 때는 최적이 아닐 수 있다.

욕심쟁이 알고리즘, 탐욕법 등의 이름으로 불린다.

 

그리디 알고리즘으로 풀어야하는 대표적인 문제 유형으로는

  • 거스름돈
  • 활동 선택 문제
  • 최소 신장 트리

등등의 유형들이 있다.

 

거스름돈
당신은 음식점의 계산을 도와주는 점원이다.
카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리 동전이 무한히 존재한다고 가정한다.
손님에게 거슬러 줘야 할 돈이 N원일 때 거슬러 줘야 할 동전의 최소 개수를 구하라.
단, 거슬러 줘야 할 돈 N은 항상 10의 배수이다.

거스름돈 유형에서는 가장 큰 화폐 단위부터 돈을 거슬러 주는 것이 포인트다.

거슬러 줘야 할 N원은 제일 먼저 500원, 그다음으로 100원, 50원, 10원 차례대로 거슬러 주면 최소의 동전 개수로 거슬러 줄 수 있다.

n = 1260
count = 0

coin_type = [500, 100, 50, 10]

for coin in coin_type:
    count += n // coin
    n %= coin
print(count)

1260원을 거슬러 줘야 할 때를 예시로 들었다.

count는 동전의 개수를 나타낸다.

coin_type에는 동전의 단위가 큰 500원부터 순차적으로 들어있다.

for문으로 coin_type 차례대로 500원부터 coin이라는 변수로 사용한다.

 

첫 번째 루프에서 1260원을 500원으로 나눈 몫(500원 짜리 동전의 개수)을 count에 대입한다.

그리고 1260원을 500원으로 나눈 나머지(500원 짜리를 거슬러 주고 남은 돈)를 다시 n에 대입한다.

 

이렇게 coin_type에 있는 모든 동전 단위를 차례대로 계산하여 최소의 동전 개수를 구하는 문제 유형이다.

 

그리디 알고리즘의 정당성

대부분의 알고리즘 문제는 그리디 알고리즘의 방법을 이용했을 때 최적의 답을 찾을 수 없는 경우가 많다.

거스름돈 유형의 경우 가장 큰 단위부터라는 매우 직관적이고 단순한 접근이 가능할 땐 그리디 알고리즘의 방법이 효과적이라고 할 수 있다.

 

그리디 알고리즘으로 답을 찾을 때는 그 방법이 정당한지에 대한 확실한 점검이 필요하다.

 

 

출처

http://www.yes24.com/Product/Goods/91433923

 

이것이 취업을 위한 코딩 테스트다 with 파이썬 - YES24

나동빈 저자의 유튜브 라이브 방송 https://www.youtube.com/c/dongbinnaIT 취준생이라면 누구나 입사하고 싶은 카카오 · 삼성전자 · 네이버 · 라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다!IT 취준생

www.yes24.com

반응형