

이 문제는 집합 안에 있는 원소들의 차이가 가장 적을 때 곱이 가장 크다.
그래서 합을 이용해서 모든 수를 고르게 분배해야 한다.
먼저 s/n 한 값을 n만큼 가지고 있는다.
그 다음에 (s/n + s%n)만큼의 개수는 s/n+1이다. s/n+1개만큼 (s/n + s%n)를 먼저 배열에 넣는다.
그러면 s/n 값의 개수는 n에서 (s/n + s%n)만큼의 개수를 뺀 값이 된다.(s/n + s%n)+1을 배열에 해당하는 개수만큼 넣는다.
class Solution {
public int[] solution(int n, int s) {
// 개수가 합보다 큰 경우에는 집합이 존재할 수 없다
if (n > s) {
return new int[]{-1};
}
int num = s / n;
int cntOfPlus1 = s % n;
int[] answer = new int[n];
for (int i = 0; i < (n - cntOfPlus1); i ++) {
answer[i] = num;
}
for (int i = n - cntOfPlus1; i < n; i ++) {
answer[i] = num+1;
}
return answer;
}
}

풀이를 머리로는 완벽하게 이해하고 코드로도 쉽게 작성할 수 있는데 풀이를 말로 설명하려니까 너무 어렵다. 좀 더 풀어서 설명하는 방법도 연습해야겠다.