코딩뚠뚠

[백준문제풀이] 11047 동전0 본문

알고리즘 문제풀이/백준문제풀이

[백준문제풀이] 11047 동전0

로디네로 2020. 12. 30. 12:49
반응형

 

풀이일시 : 2020-09-02

 

문제 :

준규가 가지고 있는 동전은 총 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의 배수)

ex)

10 4200

1

5

10

50

100

500

1000

5000

10000

50000

 

출력:

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.

ex)

6

 

풀이 :

필요한 동전의 최솟값을 구한다.

dbstndi6316.tistory.com/62

 

[기본문제풀이] greedy 알고리즘

풀이 일시 : 2020-08-29 ​ 그리디알고리즘 : 당장 눈앞에의 최적의 상황만 쫓는 알고리즘이다. 대표적인 알고리즘으로는 가장 짧은 간선부터 연결하는 크루스칼 알고리즘이 있다. ​ 문제 : 총 몇

dbstndi6316.tistory.com

dbstndi6316.tistory.com/25

 

[개념정리] vector container

vector 란 C++ STL vector는 list계열의 container 종류이다. 자료구조의 스택과 구조가 비슷하다. vector를 생성하면 메모리 heap에 생성되며 동적할당 된다. ​ vector 사용 선언 및 초기화 vector<자료형> 변수.

dbstndi6316.tistory.com

#include <iostream>
#include <vector>
#define MAX 10
using namespace std;

vector<int> v;

int main() {
	int n, k, coin, result = 0;
	scanf_s("%d %d", &n, &k); //10개의 동전, k원을 만들어야됨
	for (int i = 0; i < n;i++) {
		scanf_s("%d", &coin);
		v.push_back(coin);
	}
	for (int i = v .size(); i >=0; i--) { //9~0까지 반복
		if (k > v[i]) { //k원이 현재 배열의 숫자보다 클때
			result = result + k / v[i]; //result는 동전의갯수
			k = k % v[i]; //현재 돈에서 기준돈을 나눴을 때 나머지를 k에저장
		}
	}
	result = result + k;
	printf("%d", result);
}
반응형