프로그래밍/백준, 프로그래머스 문제 풀이

백준 1500번 최대곱 풀이(c++)

오늘의논리 2024. 2. 6. 12:08
728x90

문제

 

세준이는 정수 S와 K가 주어졌을 때, 합이 S인 K개의 양의 정수를 찾으려고 한다. 만약 여러개일 경우 그 곱을 가능한 최대로 하려고 한다.

가능한 최대의 곱을 출력한다.

만약 S=10, K=3이면, 3,3,4는 곱이 36으로 최대이다.

입력

첫째 줄에 두 수 S와 K가 주어진다. K는 20보다 작거나 같고, S는 100보다 작거나 같으며 K보다 크거나 같다.

출력

첫째 줄에 정답을 출력한다. 답은 9223372036854775807보다 작다.

K의 기본베이스는 S/K 이기 때문에 각 K들에게 해당값을 넣어주고 S%K 값들을 순차적으로 하나씩 넣어줘서 풀게 되었다.

#include <iostream>
#include <vector>
#include <list>
using namespace std;


int main()
{
	size_t S, K, answer(1);
	cin >> S >> K;
	int temp = S / K;
	int remain = S % K;
	vector<size_t> v(K, temp);

	while (true)
	{
		if (!remain) break;
		for (int i = 0; i < v.size(), remain>0; ++i)
		{
			--remain;
			++v[i];
		}
	}
	for (int i = 0; i < v.size(); ++i)
	{
		answer *= v[i];
	}
	cout << answer;

	return 0;
}
728x90