[프로그래머스 C++] 최고의 집합

 

https://school.programmers.co.kr/learn/courses/30/lessons/12938

 


 

 

해결전략

 

수학?

 

중복을 허용하는 집합에서 곱이 최대가 되어야 한다.

숫자의 크기 차이가 작을수록 곱은 최대가 된다.

 

그래서 s / n 으로 몫을 구하여 중간값을 기준으로 집합을 만든다.

 

s % n 으로 나머지를 구하고 나머지 값 만큼 숫자를 더한다.


 

정답코드

 

#include <vector>
using namespace std;
vector<int> solution(int n, int s) {
vector<int> answer;
int value = s / n; // s를 n으로 나눈 몫
int remainder = s % n; // s를 n으로 나눈 나머지
int x = n - remainder; // n에서 나머지를 뺀 값
if (value < 1) // value가 1보다 작으면 -1을 반환하고 종료
{
answer.push_back(-1);
return answer;
}
for (int i = 1; i <= n; i++)
{
if (i > x) { // i가 x보다 크면 value + 1을 추가
answer.push_back(value + 1);
}
else { // i가 x보다 작거나 같으면 value를 추가
answer.push_back(value);
}
}
return answer;
}