본문 바로가기
Problem Solving/BOJ

[BOJ][Python]11047번 풀이

by NoiB 2022. 6. 5.
반응형

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

n,k = map(int, input().split())
c = [int(input()) for _ in range(n)]
c.append(100000001)
cnt = 0
while k != 0:
    for i in range(n+1):
        if c[i]<=k:
            continue
        else:
            cnt += k//c[i-1]
            k = k%c[i-1]
print(cnt)

해당 문제는 저도 모르게 알고리즘을 봐버리는 바람에 크게 고민을 하지 않았던 문제입니다. k원을 최소 갯수의 동전으로 구현하는 문제인데요. k보다 크지 않은 선에서 최대한 k에 근접한 동전을 선택해야 적은 갯수로 k원을 만들 수 있겠죠. 그래서 저는 동전은 오름차순으로 제공된다고 하니까 c[i]가 k보다 작거나 같을 때는 스킵하고 커졌을 때의 인덱스에서 하나를 뺀 금액을 이용하는 방향으로 짜봤습니다. 다만 이렇게 할 경우 50000원 보다 k가 클 경우 계속 컨티뉴로 무한 반복이 되기 때문에 k의 최대값 보다 큰 숫자를 하나 추가 해줘서 50000을 무조건 사용할 수 있도록 했습니다(for문이 다 돌면 50000을 쓰도록 해줘도 같은 효과를 낼 것 같네요. k가 0이 안됐더라도 어차피 50000보다 작은 경우 몫도 나머지도 영향을 안주니까요. 다만 불필요하게 while 한 번에 두 줄의 코드를 실행하겠지만요).

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]12865번 풀이  (0) 2022.06.05
[BOJ][Python]14606번 풀이  (0) 2022.06.05
[BOJ][Python]15489번 풀이  (0) 2022.06.04
[BOJ][Python]17219번 풀이  (0) 2022.06.04