문제 정보

풀이

합이 S가 되면서, 원소들의 곱이 최대가 되도록 하려면, 원소들 간의 차이가 최소가 되도록 해야 한다.

다르게 표현하자면, S개의 달걀을 n개의 바구니에 최대한 균등하게 나누는 것이다.

그러므로 배열의 각 원소를 으로 초기화하고, 나머지(S % N)를 1씩 분배해준다. 이때, 문제에서 오름차순으로 정렬된 배열을 반환하라 했으므로, 배열의 뒤에서부터 1씩 더하면 된다.

추가로, n이 S보다 큰 경우에는 원소가 최소 1 이상인 자연수 집합을 만들 수 없으므로 배열에 -1을 담아 반환한다.

코드

import java.util.*;
 
class Solution {
    public int[] solution(int n, int s) {
        if (n > s)
            return new int[]{ -1 };
        
        int[] answer = new int[n];
        int remainder = s % n;
        
        Arrays.fill(answer, s / n);
        
        int idx = n - 1;
        while (remainder > 0) {
            answer[idx]++;
            remainder--;
            idx--;
        }
        
        return answer;
    }
}