자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 "집합"으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다.
예를 들어서 자연수 2개로 이루어진 집합 중 합이 9가 되는 집합은 다음과 같이 4개가 있습니다.
{ 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 }
그중 각 원소의 곱이 최대인 { 4, 5 }가 최고의 집합입니다.
집합의 원소의 개수 n과 모든 원소들의 합 s가 매개변수로 주어질 때, 최고의 집합을 return 하는 solution 함수를 완성해주세요.
제한사항
입출력 예
| n | s | result |
| 2 | 9 | [4, 5] |
| 2 | 1 | [-1] |
| 2 | 8 | [4, 4] |
입출력 예 설명
입출력 예#1
문제의 예시와 같습니다.
입출력 예#2
자연수 2개를 가지고는 합이 1인 집합을 만들 수 없습니다. 따라서 -1이 들어있는 배열을 반환합니다.
입출력 예#3
자연수 2개로 이루어진 집합 중 원소의 합이 8인 집합은 다음과 같습니다.
{ 1, 7 }, { 2, 6 }, { 3, 5 }, { 4, 4 }
그중 각 원소의 곱이 최대인 { 4, 4 }가 최고의 집합입니다.
function solution(n, s) { const dividedNum = s / n; if(dividedNum < 1) return [-1]; const intNum = dividedNum|0; const answer = Array(n).fill(intNum); const length = s - (intNum * n); for(let i = 0; i < length; i++) { answer[answer.length - 1 - i] += 1; } return answer; }마지막에 구해야 되는 값이 다 곱해서 가장 큰 수가 되는 요소들의 배열인데
곱한 값이 가장 크려면 서로 크기 차이가 거의 나지 않아야 한다.그 말은 평균에 가까운 수들의 곱이 가장 크다는 소리다.
우선 평균 근사치를 구하기 위해
s를n으로 나누고, 1보다 작으면 평균이 합보다 크니[-1]을return시킴.그렇지 않으면 나눈 값에서 소수점을 버리고 모두 같은 수로 배열을 채운 후에 배열 요소 뒤에서부터 1씩 더해서 배열 모든 수의 합이
s와 같아질 때return하면 됨.