n개의 수의 합이 s이고, 곱이 가장 크려면 모든 수가 비슷하게 커야한다!
그러려면 s / n
값을 기준으로 놓는 것이 좋다.
예를 들어 n = 3, s = 9
의 경우 답은 [3, 3, 3]
인 거다!
하지만 모든 수가 딱 떨어지지 않고 n = 3, s = 11
인 경우와 같이 나머지가 생기는 수가 있다.
이 경우 나머지 수를 적절히 배분하면 된다. [3, 4, 4]
d = s / n
, m = d % n
이라고 할 때, 위 경우 d = 3, m = 2 이다.
m만큼 남는 값을 배열 요소에 하나씩 더해주면 된다.
고민하다가 m을 인덱스로 접근하여 해결하였다.
m을 감소시키면서 m인덱스 자리에 1씩 더하면 된다~~
def solution(n, s):
if s / n < 1: return [-1]
d, m = divmod(s, n)
answer = [d for i in range(n)]
while m > 0:
answer[m] += 1
m -= 1
return sorted(answer)