[프로그래머스 | javascript] 명예의 전당 (1)

728x90
반응형

(1) 내 풀이

function solution(k, score) {
    let tempArr = [];
    let newArr = [];

    //1. k일차까지는 최소값
    for (let i = 0; i < k; i++) {
        //(+)k가 score보다 길이가 길 경우
        if (i === score.length) {
            break;
        }
        tempArr.push(score[i]);
        newArr.push(Math.min(...tempArr));
    }

    //2. k+1일부터는 추가된 숫자 + 배열[0] 제외=> 여기의 최솟값
    for (let i = k; i < score.length; i++) {
        tempArr.push(score[i]);
        tempArr.sort((a, b) => a - b);
        tempArr.shift(0);
        newArr.push(Math.min(...tempArr));
    }
    return newArr;
}

1) k값을 기준으로 분기해서 생각함

2) k일차까지는 배열의 최소값을 구하기 

=> 새로운 배열에 push해서 1일차~k일차까지는 넣기 (tempArr)

=> 각 일차마다 Math.min 값을 해서 정답 배열에 추가하기 (newArr)

 

3)  k+1일차부터는 추가된 숫자 + 배열[0] 값 제외하기

=> tempArr에 데이터 추가하고, 오름차순 정렬하여, shift로 배열[0] 제거

=> 정답 배열에 최솟값 넣어주기

 

4) 중요포인트 ★

=> k가 score보다 길이가 긴 경우를 생각해야함

예를 들어,

k=10

score =[1,10,2,5,6,7,8]  (length 7)

이때는 정답이 [1,1,1,1,1,1,1]이여야함

 

★예외처리를 안하면 k가 7 이후부터는 Nan값이 나옴

if (i === score.length) {
    break;
}

 

 

끝.

반응형