[JavaScript] 최고의 집합
2022. 9. 16. 18:23ㆍAlgorithm/프로그래머스
level : 3
문제 링크 : 최고의 집합
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
My Solution
function solution(n, s) {
let answer = [];
if(n>s)
return [-1];
answer = new Array(n).fill(Math.floor(s/n));
let rest = s%n;
for(let i = 0; rest>0;i++){
answer[i]++;
rest--;
}
answer.reverse();
return answer;
}
풀이방법
자연수 분할을 이용하며 수의 성질을 이용하여 문제를 해결하였다.
먼저 s가 n보다 작으면 자연수로는 분할할 수 없다. 따라서 이 경우에는 [-1]을 return 하였다. ( 예외 처리 )
자연수의 분할로 각 숫자가 나왔을 때, 그 수들의 곱은 각각의 숫자들이 차가 작아야 가장 큰 값을 만들 수 있다.
그리하여 s를 n으로 나눈 몫을 n개로 분할 한다. 그 후 나머지가 0이 될 때 까지 첫 원소부터 차례대로 1을 증가시킨다. (뒤에서 부터 하면 reverse 메서드를 사용할 필요가 없어 더 효율적이다.)
그 후 JavaScript의 Array에 있는 reverse라는 메서드를 이용하여 배열을 뒤집는다.
느낀점
수학적인 접근으로 푼다면 어렵지 않게 풀 수 있을 것 같은 문제이다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[JavaScript] 베스트앨범 (0) | 2022.09.17 |
---|---|
[JavaScript] N개의 최소공배수 (0) | 2022.09.16 |
[JavaScript] 피보나치 수 (0) | 2022.09.15 |
[JavaScript] 후보키 (0) | 2022.09.06 |
[JavaScript] 소수 찾기 (0) | 2022.09.06 |