문제
나의코드
const solution = (k, score) => {
let lowHonor = [];
let arrayOfHonor = [];
for(let i = 0; i < score.length; i++) {
if (arrayOfHonor.length < k) {
arrayOfHonor.push(score[i]);
lowHonor.push(Math.min(...arrayOfHonor));
continue;
} else {
let minValueOfHonor = Math.min(...arrayOfHonor);
if(minValueOfHonor < score[i]) {
arrayOfHonor.sort((x, y) => y - x).pop();
arrayOfHonor.push(score[i]);
}
lowHonor.push(arrayOfHonor.sort((x, y) => x - y)[0]);
}
}
return lowHonor;
}
로직흐름
- lowHonor : 명예의 전당에서 가장 작은 점수가 들어있는 배열
- arrayOfHonor : 명예의 전당
- 0번째 인덱스부터 score.length -1인덱스까지 반복한다.
- 만약 명예의 전당의 배열길이가 k(= 명예의 전당 요소의 개수)보다 작다면,
-- arrayOfHonor에 현재 점수를 추가한다.
-- arrayOfHonor에서 가장 작은 수를 lowHonor에 추가하고 다음 인덱스로 넘어간다.
- 만약 명예의 전당의 배열길이가 k라면, 명예의 전당에 꽉차 있다는 의미이다.
-- 명예의 전당에서 가장 작은 점수를 구한다.
-- 만약 이 점수보다 현재 score가 더 크다면,
arrayOfHonor를 내림차순으로 정렬한뒤, 가장 작은 값을 빼버리고 현재 점수를 추가한다.
-- 만약 현재 점수가 더 작다면 명예의 전당에 추가하지 않는다.
-- 현재 점수가 명예의 전당에서 가장 작은 점수보다 크든 작든,
lowHonor에 현재 명예의 전당에서 가장 작은 수를 추가한다.
- 순회를 마치고 lowHonor를 반환한다.