_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (273)
    • 데이터 엔지니어링 (30)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

파이썬 프로그래밍

그리디(Greedy)=탐욕법 알고리즘 [이코테-나동빈]

2021. 12. 30. 22:31
반응형

그리디(Greedy) = 탐욕법 알고리즘  

: 현재 상황에서 지금 당장 좋은 것만 고르는 방법

*매 순간 가장 좋아 보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향은 고려하지 않음

 

알고리즘 테스트에서는 창의력, 문제를 풀기위한 아이디어를 떠올리면 그리디 알고리즘은 해결할 수 있다!

 

문제에서 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준을 제시할 수 있으니 정렬알고리즘과 같이 사용하는 경우가 많다.

거스름돈 문제

카운터에 거스름돈으로 사용할 500원, 100원, 50원, 10원이 무한히 존재할 때 거스름돈으로 N원을 줘야하는데

이때 거슬러 줘야할 동전의 최소 개수를 구하는 경우

단 N은 항상 10의 배수이다.

#그리디 알고리즘
#거스름돈 대표적 문제
n = int(input())
count = 0

#큰 단위 화폐부터 차례로 확인
coin_types =[500, 100, 50, 10]

for coin in coin_types:
    #해당 화폐로 거슬러 줄 수 있는 동전의 개수 세기
  temp = n // coin     # 거스름돈과 coin을 나누어서 몫을 계산함
  count = count + temp # 몫과 count 더 해줌
 
  n = n%coin           # 위에서 몫 만큼 coin을 거슬러주었으니 나머지 거스름돈을 계산하고 변수에 할당 
  
print(count)

n은 input으로 값을 받아서 여러 값에도 적용할 수 있도록 하였다.

예를 들어 n=1380 이었다면

count는 9가 나올 것이다.

9가 나오는 경우는 [500, 500, 100, 100, 100, 50, 10, 10, 10] 이렇게 될 수 있다.

 

위의 예는 가장 큰 단위부터 돈을 거슬러주는 방법으로 접근을 했을때 해결 가능성이 높다!

 

하지만 그리디 알고리즘은 모든 알고리즘 문제에 적용할 수 있는 것은 아니다.

다른 알고리즘은 최적의 해를 찾을 수 없을 수 있기 때문에 주의해야 한다!

 

 

반응형

'파이썬 프로그래밍' 카테고리의 다른 글

Stack(스택), Queue(큐) 자료구조 [이코테 - 나동빈]  (1) 2022.01.04
시간복잡도, 공간복잡도 [이코테-나동빈]  (0) 2021.12.29
numpy 배열 생성하기 arange()  (0) 2021.12.27
numpy 배열 생성하기 zeros(), ones()  (0) 2021.12.23
numpy 배열 생성하기  (0) 2021.12.10
    '파이썬 프로그래밍' 카테고리의 다른 글
    • Stack(스택), Queue(큐) 자료구조 [이코테 - 나동빈]
    • 시간복잡도, 공간복잡도 [이코테-나동빈]
    • numpy 배열 생성하기 arange()
    • numpy 배열 생성하기 zeros(), ones()
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바