Old/백준

백준 11047번 동전 0 // C++

mang_dev 2020. 3. 4. 15:24

문제

 

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.

동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)

둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.

 


 

풀이

 

K의 최댓값이 1억이기 때문에 DP로 풀면 너~무 오래걸리게 된다.

 

따라서, Greedy 방식을 이용해야 한다.

 

어렵게 생각할 거 없이 그냥 간단하게, K원을 만들기 위해 사용할 수 있는 동전의 액수로 나누면 사용해야 하는 동전의 개수를 구할 수 있다.


 

코드

더보기
#include <iostream>
#include <vector>

using namespace std;

int main() {
	int N, K;
	int index;
	vector<int> coin;

	cin >> N >> K;

	for (int i = 0; i < N; i++) {
		int input;
		cin >> input;

		coin.push_back(input);

		if (input <= K)
			index = i;
	}

	int res = 0;
	for (int i = index; i >= 0; i--) {
		res += K / coin[i];
		K %= coin[i];

		if (K == 0)
			break;
	}

	cout << res;

	return 0;
}