1. 문제와 예제
(문제 링크: https://www.acmicpc.net/problem/11047)
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. 전체 코드
import sys
input = sys.stdin.readline
# 입력 받기
N, K = map(int, input().split()) # 갖고 있는 동전의 종류, 만들고자 하는 가치의 합
coins = [] # 동전 리스트
res = 0 # 필요한 동전 개수
# ex. coins = [50000, 10000, 5000, 1000, 500, 100, 50, 10, 5, 1]
for _ in range(N):
coins.append(int(input().rstrip()))
coins.sort(reverse=True) # 내림차순으로 정렬
for coin in coins:
if coin <= K:
cnt = K // coin # 추가되는 동전 개수
K -= coin * cnt # K 조정
res += cnt
# 결과 출력하기
print(res)
3. 코드 해설
동전 리스트를 만들 때 내림차순으로 정렬함으로써 'if coin <= K' 이 연산만으로 동전을 최대한 적게 쓰는 방향으로 찾을 수 있다.
'Coding Test > Baekjoon' 카테고리의 다른 글
[백준] 17219번 파이썬 (비밀번호 찾기) (0) | 2024.03.23 |
---|---|
[백준] 11399번 파이썬 (ATM) (0) | 2024.03.22 |
[백준] 1764번 파이썬 (듣보잡) (0) | 2024.03.22 |
[백준] 1620번 파이썬 (나는야 포켓몬 마스터 이다솜) (0) | 2024.03.22 |
[백준] 11723번 파이썬 (집합) (0) | 2024.03.22 |