728x90
[문제]
[풀이]
function solution(k, score) {
var answer = [];
for(let i= 0 ; i < score.length; i++)
{
if(i < k)
{
answer.push(score.slice(0, i + 1).sort((a, b) => b - a)[i]);
}
else
{
answer.push(score.slice(0, i+ 1).sort((a, b) => b - a)[k - 1]);
}
}
return answer;
}
[해설]
우선 조건이 2가지가 있다.
1. k 보다 작을 때
k 보다 수가 작을 경우 내림 차순을 했을 때 제일 마지막 값이 최소 값, 명예의 전당에 올라가는 수이다.
그렇기 때문에 우선 배열을 잘라주어야한다. 본문 코드에서는 score.slice()해주었다.
slice 함수의 경우 해당하는 배열 만큼 자르기 위해서 +1 만큼 잘라주어야한다.
예를 들어 score 배열에서 0만 자르기 위해서 score.slice(0, 1) 을 해주어야 score 배열에 score[0]만 남게 된다.
위의 방법을 이용해서 score[0, i + 1] 을 해주면 해당하는 i만큼 자를 수 있다. 이제 이것을 이용해서 내림차순으로 정렬을 해준다. 내림차순은 sort((a, b) => b - a)를 해주면 된다. 이제 내림차순으로 값이 정렬되었다면 i 값을 구해주면 최소 값을 구할 수 있다.
2. k 보다 클 때
k 보다 클 때 다른 것은 다 똑같으나 마지막 명예의 전당에 올라가야하는 조건은 k 이기 때문에, k에 해당하는 수를 내림차순중에서 넣어야한다. 하지만 배열은 0부터 시작하기 때문에 k 만큼 하면 평소의 k + 1 된 수가 들어가게 된다.
이것을 고치기 위해서 k - 1만큼되는 수를 answer에 push해주게 되면 문제를 해결할 수 있다.
'코딩 > 코딩테스트' 카테고리의 다른 글
[프로그래머스/JS] 카드뭉치 (0) | 2024.06.17 |
---|---|
[프로그래머스/JS] 2016년 (0) | 2024.06.13 |
[프로그래머스/JS] 콜라 문제 (0) | 2024.06.11 |
[프로그래머스/JS] 두 개 뽑아서 더하기 (0) | 2024.06.05 |
[프로그래머스/JS] 문자열 내 마음대로 정렬하기 (0) | 2024.06.03 |