Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Today
Total
관리 메뉴

차차로그

[JS] 연습문제 > 명예의 전당 (1) 본문

코딩테스트

[JS] 연습문제 > 명예의 전당 (1)

차차한 2024. 9. 10. 16:05

이 문제는 두 가지 방법으로 풀었다

 

먼저 1번 풀이

function solution(day, score) {
    var answer = [];
    var arr = [];
    for(let i = 0; i < score.length; i++){    
        if(i < day){
            arr.push(score[i]);
        }else{
            if(score[i] > Math.max(...arr)){
                arr.shift();
                arr.push(score[i]);
            }else if(score[i] <= Math.max(...arr) && score[i] > Math.min(...arr)){
                arr.shift();
                arr.unshift(score[i]);
            }
        }
        arr = arr.sort((a,b)=>a-b);
        answer.push(arr[0]);        
    }
    return answer;
}

생각나는 대로 작성한 코드라 가독성이 별로다..

day가 3이면 score의 2번 인덱스 값까지는 따로 값 체크 없이 들어가니 바로 arr.push(score[i])를 해줬다.

그 외에는 새로운 점수가 arr의 가장 큰 값보다 크다면 맨 앞의 값을 shift하고 제일 마지막에 push를 해줬다

만약 최소값보다 크고 최대값보다 작거나 같다면 shift 후에 가장 앞에 점수를 넣어줬다 (unshift)

arr에 새로운 점수를 넣어준 후에는 오름차순 배열을 해서

가장 작은 점수인 0번 인덱스에 있는 값을 answer 배열에 담아줬다.

정답이긴 하지만 나중에 보면 이게 무슨 코드인가..싶을 그런 코드였다.

한번 풀고 나니까 정리가 돼서 좀 더 간결하게 코드를 다시 짜봤다.

 

2번 풀이

function solution(k, score) {
    var answer = [];
    var arr = [];
    for(let i = 0; i < score.length; i++){
        arr.push(score[i]);
        arr = arr.sort((a,b)=>a-b);
        if(arr.length > k){
            arr.shift();
        }
        answer.push(arr[0]);
    }
    return answer;
}

이번에는 arr배열에 바로 점수를 넣어주고 오름차순 정렬을 해줬다.

만약 arr배열의 길이가 k보다 길어졌다면 점수 하나를 지워야 하니 가장 작은 점수인 0번 인덱스값을 shift해준다.

그 후에 가장 arr의 0번 인덱스 값을 answer에 담아주면 끝!

깔끔하게 잘 풀려서 좋다

Comments