[PYTHON] 백준 11047 - 동전 0

이또삐(이민혁)·2023년 5월 2일

CODINGTEST

목록 보기
88/96
post-thumbnail

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

성능 요약

메모리: 113112 KB, 시간: 116 ms

분류

그리디 알고리즘

문제 설명

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.

동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)

둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.


아이디어, 문제풀이

  • 그리디 기본문제
  • 배열을 내림차순으로 만들어 큰 값부터 적용할 수 있도록 해준다.
  • 나누기를 활용하는게 좋다.

TROUBLE SHOOTING

  • 별다른 어려움 없이 풀었던 문제. 그리디라는 개념이 의미하는게 뭔지를 안다면 쉽게 해결 가능하다. 문제에 그리디가 적용 가능한지? 를 항상 생각하는게 좋다. 실전에서도 문제를 마주 했을때 바로 적용할 수 있을지 모르겠다.

코드

#https://www.acmicpc.net/problem/11047
#동전 0
#11047

import sys
input = sys.stdin.readline

n, k = map(int, input().split())

coins = []
for _ in range(n):
    a = int(input())
    coins.append(a)

# print(coins)

coins.sort(reverse=True)

# print(coins)

def fun(k):

    cnt = 0

    for coin in coins:
        if coin <= k:
            count =  k // coin
            k = k % coin
            cnt = cnt + count
            # cnt += 1
    
    return cnt

answer = fun(k)
print(answer)
profile
해보자! 게임 클라 개발자!

0개의 댓글