명예의 전당 (1)

RyuIsangGo🤘·2023년 8월 23일
0

문제

나의코드

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 : 명예의 전당
  1. 0번째 인덱스부터 score.length -1인덱스까지 반복한다.
  2. 만약 명예의 전당의 배열길이가 k(= 명예의 전당 요소의 개수)보다 작다면,
    -- arrayOfHonor에 현재 점수를 추가한다.
    -- arrayOfHonor에서 가장 작은 수를 lowHonor에 추가하고 다음 인덱스로 넘어간다.
  3. 만약 명예의 전당의 배열길이가 k라면, 명예의 전당에 꽉차 있다는 의미이다.
    -- 명예의 전당에서 가장 작은 점수를 구한다.
    -- 만약 이 점수보다 현재 score가 더 크다면,
    arrayOfHonor를 내림차순으로 정렬한뒤, 가장 작은 값을 빼버리고 현재 점수를 추가한다.
    -- 만약 현재 점수가 더 작다면 명예의 전당에 추가하지 않는다.
    -- 현재 점수가 명예의 전당에서 가장 작은 점수보다 크든 작든,
    lowHonor에 현재 명예의 전당에서 가장 작은 수를 추가한다.
  4. 순회를 마치고 lowHonor를 반환한다.
profile
이전 블로그 입니다.

0개의 댓글