[Python]알고리즘/백준

[그리디 알고리즘] 11047번 - 동전

HSY_mumu 2022. 3. 21. 15:41
728x90

[백준] 11047번 - 동전

1) 문제 해결 아이디어

사실상 최소 개수로 동전을 거슬러주는 문제와 동일하다.

 

동전의 가치가 큰 동전을 최대한 많이 거스는 것이 동전을 최소로 하기 위한 방법이다.

동전 종류를 큰 순서대로 내림차순하여 처리하는 것이 포인트다.

높은 금액대부터 for문으로 검사하여 동전 가치가 금액보다 작거나 같으면 몇 개를 바꿀 수 있는지 계산하여 더해주는 방식으로 구현하였다.

 

 

2) 소스코드

n, k = map(int, input().split())  # 동전 종류 수, 총 금액
coins = [int(input()) for _ in range(n)] # 동전 가치(오름차순)
coins.sort(reverse=True)  #  내림차순 정렬
cnt = 0  # 필요한 동전 개수

# 필요한 동전 개수 최솟값 찾기
for coin in coins:
  # 모두 잔액이 처리되면 탈출
  if(k == 0):
    break
  # 동전 가치가 금액보다 작거나 같으면
  if(coin <= k):
    n = (k // coin)  # 동전 종류 k로 바꿀 수 있는 최대 개수 
    k -= (coin * n)  # 잔액 변경
    cnt += n         # 개수 추가

print(cnt)

 

 

 

 

728x90