프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
s를 최대한 균등하게 나누면 최고의 집합이 된다. 왜냐면 수학적으로 그렇다.
x+y=s일 때, x*y의 최대값은 x=y일때다.
n이 3 이상일때도 해당되는지는 잘 모르겠지만 아무튼 그렇다.
따라서 n과 s의 최고의 집합은 모든 원소가 s/n일때다.
그런데 집합의 원소는 모두 자연수이므로, 모든 원소를 s/n의 몫으로 하고, s/n의 나머지를 하나씩 추가해주면 된다.
코드
function solution(n, s) {
if (s < n) return [-1];
var answer = [];
var div = Math.floor(s / n);
var r = s % n;
console.log(r);
for (var i = 0; i < r; i++) {
answer.push(div + 1);
}
for (var i = 0; i < n - r; i++) {
answer.unshift(div);
}
return answer;
}
결과

효율성 테스트에서 시간초과가 발생했다.
unshift가 비효율적인것 같다.
해당하는 부분을 수정했다.
코드
function solution(n, s) {
if (s < n) return [-1];
var div = Math.floor(s / n);
var r = s % n;
console.log(r);
var answer = new Array(n - r).fill(div).concat(new Array(r).fill(div + 1));;
return answer;
}
결과

끝
'코딩연습' 카테고리의 다른 글
| (C#)순위 (0) | 2025.05.23 |
|---|---|
| (javascript) 추석 트래픽 (0) | 2025.05.16 |
| (javascript) 올바른 괄호의 갯수 (0) | 2025.05.11 |
| (javascript) 셔틀버스 (0) | 2025.05.07 |
| (javascript) 거스름돈 (0) | 2025.05.01 |