영벨롭 개발 일지

[백준 BOJ][C++]11047번 동전 0 풀이: 그리디 알고리즘 본문

알고리즘 문제 풀이/BOJ

[백준 BOJ][C++]11047번 동전 0 풀이: 그리디 알고리즘

영벨롭 2022. 2. 24. 21:51

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

 

 입력으로 주어지는 동전의 가치 Ai가 오름차순으로 주어졌음으로 제일 가치가 큰 동전부터 비교해가며 풀이를 진행하면 됩니다. 

 

 가치 k를 만들기 위해 필요한 동전의 수가 최소가 되기 위해선, 먼저 k보단 작은 수들 중에서 가장 큰 수를 뽑아 k를 나눈 몫이 그 동전의 개수를 의미합니다. 

 그 나머지는 남은 가치의 합을 나타내고 위 과정을 나머지가 0이 될때까지 반복하면 됩니다. 

 

#include<iostream>

using namespace std;

int main(void) {

	int n, k;
	int value[11];
	int ans = 0;

	cin >> n >> k;

	for (int i = 0; i < n; i++)
		cin >> value[i];

	for (int i = n - 1; i >= 0; i--) {
		if (k == 0)
			break;

		if (k < value[i])
			continue;

		ans += (k / value[i]);
		k %= value[i];
	}

	cout << ans;

	return 0;
}
반응형