본문 바로가기
코딩테스트

(javaScript) 명예의전당(1)

by 어뇨 2024. 2. 16.

 

 

function solution(k, score) {
    var answer = [];
    let present = [];

    for(let i = 0 ; i < score.length ; i++){
        present.push(score[i])
      let sortPresent = present.sort((a , b)=> b - a)
      let finalPresent = sortPresent.slice(0, k).sort((a , b ) => a - b)
        answer.push(finalPresent[0])

        }


    return answer;
}

 

문제가 가면갈수록 길어지는거 같아서 이젠 문제 이해하는데도 시간이 꽤 걸린다...

요약하면 매일 점수 발표를 하고 그 점수를 정렬한 뒤 k값 만큼 잘라서 answer에 넣으면 된다. 

우선 매일 점수 발표를 한다 생각하면 반복문을 쓰면 되겠다 싶었고. 

for문을 써 present라는 새로 만든 배열에 score[i]를 넣고 console.log(present) 를 찍어보니 의도한대로

[10], [100 ,10], [100, 20, 10] ... 이런식으로 하나하나 넣은게 찍히는걸 확인했다. 

그럼 이제 내림차순으로 정렬을하면 높은숫자가 앞으로 오게끔 만들고 마지막으로 k값만큼 짜르고 다시 오름차순으로 정렬하면 된다. 그리고 answer에 0번째 인덱스를 넣으면 매일 가장 낮은 점수를 반환하게 된다.

 

다른사람의 풀이

function solution(k, score) {
    const answer = [];
    const announced_score = [];

    for(let i = 0; i < score.length; i++) {
        announced_score.push(score[i]);
        announced_score.sort((a, b) => b - a);

        if(announced_score.length >= k) answer.push(announced_score[k - 1]);
        else answer.push(announced_score[announced_score.length - 1]);
    }

    return answer;
}

 

중간 첫번째 정렬까지는 같다 하지만 if-else문을 써 더 깔끔한 코드가 됐다. 

난 slice와 다시 정렬하는 식으로 해서 k중 가장 낮은 점수를 반환하게끔 했다면 if문을써서 새로만든 배열의 길이가 k보다 같거나 크면 내림차순 되있는 배열의 가장 k-1번째 인덱스(마지막 인덱스)를 반환하고 그게 아니라면 새로만든 배열의 길이 -1 이 마지막 인덱스이므로 반환하게끔 했다

확실히 이 방법이 정확성테스트에서 시간이 덜걸리는, 즉 더 빠르고 가독성도 좋은 코드인거 같다.

'코딩테스트' 카테고리의 다른 글

(javaScript) 카드뭉치  (0) 2024.02.19
(javaScript) 2016년  (0) 2024.02.18
(javaScript) 가장 가까운 같은 글자  (0) 2024.02.13
(javascript) K번째수  (0) 2024.02.07
(javascript) 문자열 내 마음대로 정렬하기  (0) 2024.02.06