알고리즘/BOJ

[BOJ] 11047 - 동전 0

서노리 2021. 12. 31. 04:23
반응형

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())
array = list()
num = 0
for i in range(n):
    array.append(int(input()))

for i in reversed(array):
    coin = i
    num += k // coin
    k %= coin

print(num)

이 문제는 그리디 알고리즘을 이용하여 풀 수 있는 가장 간단하고 대표적인 문제이다.

풀이 방법은 가장 큰 단위의 화폐부터 가장 작은 단위의 화폐까지 차례로 확인하여 나가는 것이다.

그리디 알고리즘의 특성 상 정당성을 검증해야 하는데, 입력 값을 보면 모든 동전의 큰 단위가 항상 작은 단위의 배수이므로 작은 단위의 동전들을 조합해 다른 해가 나올 수 없다. 따라서 이는 항상 최적의 해를 주기 때문에 정당하다.

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 18352 - 특정 거리의 도시 찾기  (0) 2022.01.16
[BOJ] 4673 - 셀프 넘버  (0) 2022.01.14
[BOJ] 5622 - 다이얼  (0) 2022.01.09
[BOJ] 1157 - 단어 공부  (0) 2022.01.06
[BOJ] 1439 - 뒤집기  (0) 2022.01.04