본문 바로가기
알고리즘/백준문제풀이

백준 11047번

by 푸딩코딩 2022. 10. 12.
728x90
반응형

동전 0 성공

 
 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 256 MB 97378 50995 39582 51.867%

문제

준규가 가지고 있는 동전은 총 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원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.

예제 입력 1 복사

10 4200
1
5
10
50
100
500
1000
5000
10000
50000

예제 출력 1 복사

6

예제 입력 2 복사

10 4790
1
5
10
50
100
500
1000
5000
10000
50000

예제 출력 2 복사

12
#include <iostream>
#include <string>
#include <memory.h>
using namespace std;


int main() {
	int count = 0;
	int n, k;

	cin >> n >> k;
	int * arr = new int[n];
	for (int i = 0; i < n; i++) {
		int a;
		cin >> a;
		arr[i] = a;
	}
	int key = 0;
	for (int i = n - 1; i >= 0; i--) {
		count += k / arr[i];
		k = k % arr[i];

	}
	cout << count;
	return 0;
}

어렵게 생각해서 시간초과 될까봐 이진탐색 썼는데 시간초과..

알고보니 엄청 쉬운거였다 

풀긴했으나 우울했던 문제.. 

이진탐색을 공부한 것에 의의를 두자

 

그리디 알고리즘이란 탐욕 알고리즘으로, 최적해를 구하는 데에 사용되는 근사적인 방법이다. 

ㄹ복잡도는 O(n)이고 계속 나누어 주는거구나 

그리고 실버승급했따! 

쉬운 문제라도 매일매일 풀도록 노력해보자 

728x90
반응형