728x90
문제
준규가 가지고 있는 동전은 총 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원을 만드는 문제이다.
동전 개수가 최소로 필요하기 때문에 가장 비싼 동전부터 고르면서 K원에 가깝게 만들어 주면 된다.
가장 비싼 동전을 계속 고른다는 점에서 greedy 문제라고 할 수 있다.
그리디 중에서 쉬운 편에 속했기 때문에 금방 풀었다.
C++ 코드
#include <iostream>
using namespace std;
int N, K;
int p[11];
int main()
{
cin >> N >> K;
for (int i = 1; i <= N; i++) cin >> p[i];
int sum = 0;
int cnt = 0, idx = N;
while (sum <= K && idx>=1) {
if (sum + p[idx] <= K) {
sum += p[idx];
cnt++;
}
else
idx--;
}
cout << cnt;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 수 묶기 (1744번) (0) | 2020.03.01 |
---|---|
[백준] 회의실배정 (1931번) (0) | 2020.03.01 |
[백준] 쿼드트리 (1992번) (0) | 2020.02.29 |
[백준] 나무 자르기 (2805번) (0) | 2020.02.28 |
[백준] 다리 만들기 (2146번) (0) | 2020.02.27 |