본문 바로가기
BOJ

BOJ 11047 동전 0

by 홍code 2022. 3. 10.

문제 링크 : 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로 만들려고 할 때 필요한 동전의 최소 개수를 구하는 문제이다.

풀이

첫 번째 예제 입력값을 보자 1, 5, 10, 50, 100, 500, 1000, 5000, 10000, 50000의 가치를 가진 동전들로 4200원을 만들어야 한다.

이 문제의 풀이법은 생각보다 쉽게 떠올릴 수 있을 것이다. 무조건 사용할 수 있는 범위 내에서 가장 큰 가치를 가진 동전을 많이 사용하는 것이다. 4200원을 만들기 위해서 4200원 이하의 가장 큰 액수가 1000원이므로 4번 사용해서 4000원을 만들 수 있다. 그러면 200원이 남게 되고 그다음으론 100원짜리를 두 번 써서 총 1000 x 4 + 100 x 2로 4200원을 만들 수 있고 답은 6이 된다.

그대로 구현하면 된다.

코드

#include<iostream>
using namespace std;
int n, k, arr[11],cnt;
int main() {
	cin >> n >> k;
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	for (int i = n - 1; i >= 0; i--) {
		if (arr[i] <= k) {
			cnt += k / arr[i];
			k %= arr[i];
		}
	}
	cout << cnt << "\n";
}

'BOJ' 카테고리의 다른 글

BOJ 2104 부분배열 고르기  (2) 2022.03.12
BOJ 1629 곱셈  (0) 2022.03.12
BOJ 15748 Rest Stops  (0) 2022.03.10
BOJ 13904 과제  (0) 2022.03.10
BOJ 2212 센서  (0) 2022.03.10

댓글