s를 n개의 자연수 합으로 표현한다. 가능한 모든 조합 중 곱이 가장 큰 경우의 집합을 구한다.
가장 곱이 큰 경우
가 어떤 경우일까? 자연수 8를 2개 자연수의 합으로 표현할 때 {1, 7}, {2, 6}, {3, 5}, {4, 4}가 존재한다. 각 곱은 7, 12, 15, 16이다. 여기에서 한 가지 힌트를 얻을 수 있다. 곱해지는 수 사이의 차가 가장 작은 조합이어야 한다
는 것이다.
def solution(n ,s):
q, r = divmod(s, n)
if q==0: return [-1]
result = [q]*n
# s를 n개 자연수 합으로 표현할 때 가장 큰 곱이 나올 경우: 각 버킷에 담긴 자연수 간 차가 가장 작다
# s=11 n=3 -> [n1, n2, n3] 중 [3, 3, 3]을 먼저 구해 놓고 나머지 2를 각 버킷에 1씩 나눠서 더해준다.
idx = -1
for _ in range(r):
result[idx] += 1
idx -= 1
# 오름차순 정렬용
return result