[lv1] 명예의 전당(1)

걸음걸음·2023년 4월 3일
0

Test

목록 보기
27/29

문제 링크

  • 명예의 전당 목록 점수 개수 k
  • 1일부터 마지막 날까지 출연한 갓들의 점수 score
  • 가수의 점수가 지금까지 출연 가수들의 점수 상위 K 번째 이내이면 해당 가수의 점수를 명예의 전당에 추가(K일까지는 모든 출연 가수의 점수가 명에의 전당에 등록)
  • 명예의 전당 최하위 점수 발표, 매일 발표되는 최하위 점수 return
function solution(k, score) {
    const honor = []; // 명예의 전당 배열
    const scores = []; // 발표되는 최하위 점수 배열(return)
    for(let i = 0; i<score.length; i++){
        const now = score[i]; // i날 출연한 가수의 점수
        honor.push(now)
	    // k날 이전까지는 그냥 최하 점수 출력
        if(i<k){
            scores.push(Math.min(...honor))
        } else {
        // k 이후에는 honor을 내림차순 정렬, k-1번째(명예의 전당 최하위 점수) 출력
            honor.sort((a,b)=>b-a);
            scores.push(honor[k-1])
        }
   }
    return scores
}

다른 사람의 풀이

function solution(k, score) {
    const stack = []
    return score.reduce((a,c) => {
        if(stack.length < k) {
            stack.push(c)
            stack.sort((a,b) => a - b)
        }
        else {
            stack.push(c)
            stack.sort((a,b) => a - b)
            stack.shift()
        }
        a.push(stack[0])
        return a
    },[])
}

reduce를 사용, 코드가 훨씬 깔끔해졌다.

profile
꾸준히 나아가는 개발자입니다.

0개의 댓글