Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Today
Total
관리 메뉴

차차로그

[JS] 연습문제 > 최고의 집합 본문

코딩테스트

[JS] 연습문제 > 최고의 집합

차차한 2022. 9. 16. 11:05

function solution(n, s) { 
    
    if(n > s){
        return [-1];
    }
    var div = Math.floor(s / n);

    var answer = new Array(n).fill(div);

    for(var i = 0; i < s % n; i++){

        answer[answer.length - 1 - i]++; 
    }
    return answer;
}

만약에 N이 2인데 S가 1이라면 두 개의 숫자로 1을 만들 수는 없기 때문에 이런 경우에는 [-1]을 리턴해준다.

먼저 s를 n으로 나누고 소수점 자리를 내려서 정수부분만 변수에 담아준다.

(s가 5이고 n이 3이라면 1만 변수 div에 담는다)

그리고 n만큼의 배열을 만들어 그 값을 모두 div로 채워준다. ([1,1,1])

최고의 집합이 나오려면 각 값의 차이가 크지 않을 때여야 하기 때문에 기준 숫자를 잡고 그 수에서 +1씩을 해주는 방식으로 답을 구한다.

s % n을 하면 2가 나오게 되고, i는 0 , 1까지만 반복을 하게 된다.

answer[answer.length -1 - i] 를 하면 answer[2], answer[1]을 가리키게 되고 그 값을 1씩 올려준다.

반복을 하면서 배열은 [1,1,1] -> [1,1,2] -> [1,2,2]가 된다.

 

만약에 s가 9이고 n이 3이라면 먼저 배열을 [3,3,3]으로 채워주고

반복을 돌리는 부분에서 s % n은 0이 나오기 때문에 반복이 돌아가지 않는다.

[3,3,3]이 27이 나오게 되는 최고의 집합이므로 이렇게 값을 구해주면 된다.

 

쉬운듯 어려운 문제

규칙은 찾았지만 원하는 인덱스에만 값을 더해주는 게 좀 어려워서 이 부분은 다른 사람의 코드를 참고했다.

 

 

Comments