입출력 예 설명
입출력 예#1
문제의 예시와 같습니다.
입출력 예#2
자연수 2개를 가지고는 합이 1인 집합을 만들 수 없습니다. 따라서 -1이 들어있는 배열을 반환합니다.
입출력 예#3
자연수 2개로 이루어진 집합 중 원소의 합이 8인 집합은 다음과 같습니다.
{ 1, 7 }, { 2, 6 }, { 3, 4 }, { 4, 4 }
그중 각 원소의 곱이 최대인 { 4, 4 }가 최고의 집합입니다.
접근법
곱이 가장 커지는 순간만 안다면 엄청 간단한 문제입니다. 곱이 가장 커지는 순간은 나온 숫자들의 차이가 중심값에 가장 가까울 때 입니다! 즉, 8이 2개의 집합으로 나눠진다고 하면 (1,8)보다 (4,4)가 더 곱이 큽니다! 이를 이용해서 코드를 짜보면, 먼저 숫자s와 집합의 개수 n을 나누어서 중심이 되는 값을 찾고, 나누어 떨어진 경우 그 집합을 리턴해주고, 아닐 경우에는 나머지만큼 중심값에 1을 더해서 리턴해 주면 됩니다! 즉, s는 15, n이 4로 입력받았을 경우 15/4 = 4..1입니다. [4,4,4] + [4+1]인 [4,4,4,5]를 리턴해 주시면 됩니다!
나의 코드
def solution(n, s):
if s-n < 0: return [-1]
value, remainder = divmod(s,n)
answer = [value]*(n-remainder) + [value+1]*remainder
return answer