본문 바로가기
코테/Greedy

[C/C++] 백준 11047, Greedy

by 상똥 2022. 12. 10.

문제

11047번: 동전 0 (acmicpc.net)

 

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

코드1

#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
	int n, k;
	int t;
	int m = 0;
	vector<int> arr, cnt; //arr:동전의 액면가, cnt: 동전의 개수

	scanf("%d %d", &n, &k);
	for (int i = 0; i < n; i++) {
		scanf("%d", &t);
		arr.push_back(t);
	}

	sort(arr.begin(), arr.end());
	reverse(arr.begin(), arr.end());

	int c;
	for (int i = 0; i < n; i++)
		cnt.push_back(0);

	for (int i = 0; i < n; i++) {
		if(arr[i] > k)
			continue;
		c = k / arr[i];
		cnt[i] = c;
		k = k - c * arr[i];
		if (k == 0)
			break;
	}

	for (int i = 0; i < n; i++)
		m += cnt[i];
	printf("%d\n", m);
}

코드2

#include <stdio.h>
#include <iostream>

using namespace std;

int main() {
	int N, K, sum = 0;
	int coin[10];
	cin >> N >> K;
	for (int i = 0; i < N; i++)
		cin >> coin[i];

	for (int i = N - 1; i > -1; i--) {
		if (K == 0)
			break;
		if (K >= coin[i]) {
			sum += K / coin[i];
			K %= coin[i];
		}
	}

	cout << sum;
}