mang_dev
맹꽁거리는 개발자
mang_dev
전체 방문자
오늘
어제
  • 분류 전체보기 (185)
    • Frontend (2)
      • Next.js (1)
    • Backend (3)
      • GraphQL (2)
    • Book (1)
      • 기타 (1)
    • Old (177)
      • 알고리즘 퍼즐 (1)
      • 백준 (131)
      • 프로그래머스 (0)
      • Codility (15)
      • LeetCode (7)
      • Codewars (1)
      • Codeforces (0)
      • Django (6)
      • React (2)
      • Naver Map Api (3)
      • Web UI (4)
      • Introduction to Cloud (2)
hELLO · Designed By 정상우.
mang_dev

맹꽁거리는 개발자

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

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

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;
}
저작자표시 (새창열림)

'Old > 백준' 카테고리의 다른 글

백준 10971번 외판원 순회(2) // C++  (0) 2020.03.05
백준 11286번 절댓값 힙 // C++  (0) 2020.03.04
백준 6064번 카잉 달력 // C++  (0) 2020.03.04
백준 1992번 쿼드트리 // C++  (0) 2020.03.04
백준 7662번 이중 우선순위 큐 // C++  (0) 2020.03.03
    'Old/백준' 카테고리의 다른 글
    • 백준 10971번 외판원 순회(2) // C++
    • 백준 11286번 절댓값 힙 // C++
    • 백준 6064번 카잉 달력 // C++
    • 백준 1992번 쿼드트리 // C++
    mang_dev
    mang_dev

    티스토리툴바