본문 바로가기
ALGORITHM/C++ - 백준

[백준 11047] 동전 0

by DDongYeop 2023. 10. 19.
728x90

문제

https://www.acmicpc.net/problem/11047

 

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

 

 

문제 분석

동전의 개수와 총 만들어야하는 돈을 입력 받는다. 

 

이후 동전의 가치가 정해진다. 

 

이 동전의 가치로 총 만들어야하는 돈을 만들어야하고, 동전을 가장 적게 써야한다. 

 

 

알고리즘 설계

동전의 개수와 만들어야하는 돈을 입력 받는다. 

 

이후 vector에 동전들의 가치를 입력 받는다. 

 

만들어야하는 돈이 0이 아니라면 계속 반복문을 돌려준다. 

 

동전의 개수만큼 반복문을 돌려 해당하는 index의 동전이 만들어야하는 돈을 뛰어넘었다면 그 전 index의 동전에서 뺴주고, 출력할 값을 올린다.

혹은 마지막까지 갔다면 그냥 마지막 index에 해당하는 동전을 뺴주며 출력할 값을 올린다. 

 

이후 사용한 코인의 개수를 출력한다. 

 

 

코드

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	int loop, money, input, coin = 0;
	vector<int> vec;
	cin >> loop >> money;

	while (loop--)
	{
		cin >> input;
		vec.push_back(input);
	}

	while (money)
	{
		for (int i = 0; i < vec.size(); ++i)
		{
			if (money < vec[i])
			{
				money -= vec[i - 1];
				++coin;
				break;
			}
			else if (i == vec.size() - 1)
			{
				money -= vec[i];
				++coin;
				break;
			}
		}
	}

	cout << coin;
}

 

vector의 reverse함수를 사용하여 돌려주고, 그걸로 만들었다면 조금 더 좋은 코드가 되었을거 같다. 

728x90

댓글