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
고생하지말고 문제부터 잘 읽자...
문제 접근
동전을 최소한 적은 개수로 K만큼의 가치를 만들자.
처음엔 재귀함수로 구현했다.
입력이 만약 이렇게 주어진다면?
3 10
3
7
9
이렇게 입력받는다면 순차적으로 접근할 시 9를 먼저 빼버리고 1이남는데 10원을 만들 수 없다!
그러면 브루트포스알고리즘이 아닌가!
재귀함수로 모든 경우를 탐색해도 안되더라...
입력 조건
(1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
무조건 배수로 주어지는 것이다. 순차적으로 빼주면 되는 문제였다.
1. 현재 금액에서 i번째 코인의 몫을 정답에 더한다.
2. 현재 금액에서 코인의 나머지를 저장한다.
끗..
코드
import sys
input = sys.stdin.readline
"""
"""
N, K = map(int,input().split())
coins = [int(input()) for _ in range(N)]
curMoney = K
ans = 0
for i in range(N-1, -1, -1):
if coins[i] <= curMoney:
ans += curMoney // coins[i]
curMoney %= coins[i]
print(ans)
'백준 > 문제풀이_python' 카테고리의 다른 글
11497 통나무 건너뛰기 _python (0) | 2022.12.14 |
---|---|
12865 평범한 배낭 _python (0) | 2022.12.14 |
11399 ATM _python (0) | 2022.12.11 |
4195 친구 네트워크 _python (1) | 2022.12.11 |
1976 여행 가자 _pyth (0) | 2022.12.10 |
댓글