[ Contents ]
1. 문제 (링크 참조)
11047번: 동전 0
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
www.acmicpc.net
2. 문제 풀이
주어진 동전 단위 내에서, 최소 동전 개수로 거슬러주는 문제입니다.
2022.01.26 - [Algorithm] - [Algorithm] 탐욕적인 그리디 알고리즘, 직관적이고 쉬운 문제해결
[Algorithm] 탐욕적인 그리디 알고리즘, 직관적이고 쉬운 문제해결
경주마들을 자세히 보면, 양쪽 시야를 차단하는 안대를 끼고 있습니다. 이를 '차안대' 라고 합니다. 말의 눈은 양 옆에 달려 있어 시야가 '350도'나 됩니다. 자기 자신 빼곤 다 보이기 때문에, 다
star7sss.tistory.com
문제의 입력 조건에서, 높은 동전 단위는 낮은 동전 단위의 배수가 된다고 한정했습니다. 동전 단위가 배수로 커질 때, '탐욕스런 선택조건'을 만족하므로 해당 문제는 그리디 알고리즘으로 풀 수 있습니다.
탐욕스런 선택조건은 '앞의 선택이 이후 선택에 영향을 주지 않아야 한다'는 조건입니다. 동전 단위가 배수로 이루어져 있을 때는 무조건 높은 단위로 거슬러 주는 게 최적입니다. 실생활의 동전 단위도 배수로 이루어져 있으며, 우리도 무의식적으로 높은 단위부터 거스름돈을 계산합니다.
ex) 거스름돈 660 => 500*1 + 100*1 + 50*1 + 10*1
3. 코드
N, K = map(int, input().split())
coin = []
for i in range(N):
coin.append(int(input()))
res = 0
for c in coin[::-1]:
if c <= K: # 남은 돈이 동전 단위보다 같거나 큰 경우 (거슬러줄 수 있는 경우)
res += K//c
K %= c
print(res)
거슬러줘야 하는 돈의 액수(K)와 동전 단위를 입력받습니다.
그리디 알고리즘을 이용하여, 큰 동전 단위부터 거슬러줍니다.
'Algorithm' 카테고리의 다른 글
[구현/수학] 백준 1427 소트인사이드 - Python (0) | 2022.02.01 |
---|---|
[구현/수학] 백준 2751 수 정렬하기 2 - Python (0) | 2022.02.01 |
[구현/수학] 백준 1193 분수찾기 - Python (0) | 2022.01.31 |
[구현] 백준 2941 크로아티아 알파벳 - Python (0) | 2022.01.30 |
[분할정복/DQ] 백준 2630 색종이 만들기 - Python (0) | 2022.01.29 |
댓글