• Home
  • About
    • Awesome soubii photo

      Awesome soubii

      초보 개발자의 공부정리용 블로그입니다. 잘못 쓰여진게 있다면 친절히 알려주세요 :)

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

[Algorithm]11047 동전 0 By Python3

23 Aug 2020

Reading time ~1 minute

오늘의 문제

https://www.acmicpc.net/problem/11047

그리디 알고리즘을 검색하면 가장 먼저, 가장 많이 예시로 드는 문제 바로 동전 거스름돈 문제다.

포인트 쳌쳌

주어진 액수를 동전만으로 만들고자 한다면 액수가 가장 큰 동전을 먼저 사용할 때 가장 최적(최소)의 동전 개수 를 필요로 한다.

풀이순서는 굉장히 간단하다.

  1. 준규가 가진 동전의 종류를 리스트(또는 딕셔너리)로 구성한다.
  2. 내림차순으로 정렬하여 액수가 큰 순서대로 입력값을 나누며 동전 개수를 카운팅한다.
  3. 입력값이 0이 될 때까지 ‘나누기, 카운팅’ 작업을 반복한다.

이러한 개념 때문에 문제 해결 시 최적의 방법을 찾는다는 그리디의 개념을 설명할 때 쉬우면서도 가장 적합한 예시가 된 것이 아닌가 싶다.

풀이 코드

import sys
n, k = map(int, sys.stdin.readline().split())
coin = []
for i in range(n):
    coin.append(input())
coin = list(map(int, coin))
coin.sort(reverse=True)
#print(coin)

idx = 0
cnt = 0
while idx < len(coin):
    if k // coin[idx] > 0:
        a = k // coin[idx]
        k -= coin[idx]*a
        cnt += a
    else:
        idx += 1
    
    if k == 0:
        break
print(cnt)


채점 결과

image



algorithmbojpython3greedy Share Tweet +1