[JavaScript] 최고의 집합

2022. 9. 16. 18:23Algorithm/프로그래머스

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