https://school.programmers.co.kr/learn/courses/30/lessons/12938
- 각 원소의 합이 S가 되는 수의 집합
- 위 조건을 만족하면서 각 원소의 곱이 최대가 되는 집합
-> 만약 s=10, n=2 일 때, (1, 9), ..., (5, 5), ..., (9, 1)의 경우가 가능하다.
-> (1, 9) = (9, 1)이니 결국 (1, 9) -> (5, 5)의 경우만 보면 될 것이다.
-> 위 경우에서 원소들의 곱이 가장 큰 경우는 (5, 5)의 경우이다.
-> 이렇게 모든 원소가 평균치로 비슷비슷할 떄, 원소들의 곱이 가장 크지 않을까? 하고 가정해본다.
def solution(n, s): answer = [] if n > s : # 집합을 구성할 수 없는 경우 리스트형태의 -1 반환 return [-1] # 원소의 합을 원소의 개수로 나눈 숫자로 리스트를 생성 num = [s//n] * n # 원소의 합을 원소의 개수로 나눴을때, 나머지를 만큼 원소에 골고루 더해줘야함 left = s % n # left가 0이 될 때까지 num리스트에 골고루 더해준다. for i in range(n-1, -1, -1): if left > 0: num[i] += 1 left -= 1 else: break # 골고루 나눠진 합이 s이고, 곱이 가장 큰 리스트 반환 return num