차차로그
[JS] 연습문제 > 최고의 집합 본문
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이 나오게 되는 최고의 집합이므로 이렇게 값을 구해주면 된다.
쉬운듯 어려운 문제
규칙은 찾았지만 원하는 인덱스에만 값을 더해주는 게 좀 어려워서 이 부분은 다른 사람의 코드를 참고했다.

'코딩테스트' 카테고리의 다른 글
[JS] 정렬 > H-Index (0) | 2022.09.16 |
---|---|
[JS] 연습문제 > 행렬의 곱셈 (0) | 2022.09.16 |
[JS] 2018 KAKAO BLIND RECRUITMENT > [1차] 캐시 (0) | 2022.09.15 |
[JS] Summer/Winter Coding(~2018) > 점프와 순간 이동 (0) | 2022.09.15 |
[JS] 2017 팁스타운 > 예상 대진표 (0) | 2022.09.15 |
Comments