최고의 집합
210705
'''
https://programmers.co.kr/learn/courses/30/lessons/12938
최고의 집합
[풀이]
1. 두 수 a, b의 곱이 최대가 될 때는 a == b 일 때이다.
이는, 두 수의 차가 최소일 때 곱이 최대가 됨을 암시한다.
=> 수학적으로 a와 b가 2e 만큼의 차이가 있을 때 두 수의 곱은 (c-e)(c+e)와 같다.
=> 이 때, c = (a+b)/2
=> c^2 - e^2 은 e가 최소일 때 최대이므로 따라서 두 수의 차가 최소일 때 곱이 최대이다.
2. 각 값의 차이를 줄이는 테크닉은 몫 만큼의 값을 나눠가지고 나머지를 하나씩 나눠갖는 것이다.
=> 따라서 몫에 해당하는 값을 나눠 가지고 rest의 길이만큼 뒤에서부터 1씩 더해준다.
=> 뒤에서부터 더해주는 이유 : 결과를 오름차순으로 반환해야 하기 때문
=> 당연한 말이지만, rest의 길이는 전체 리스트의 길이보다 작다(작아야 한다)
'''
def solution(n, s):
answer = [s // n] * n
rest = s % n
for i in range(1, rest+1):
answer[-i] += 1
return [-1] if n > s else answer
'''
'''
Last updated
Was this helpful?