티스토리 뷰

 

2022.11.28

프로그래머스 스쿨 Lv01. 명예의 전당(1)


 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🚀 문제 파악

*명예의 전당에는 총 k명의 가수만 들어갈 수 있다

*첫 날부터 마지막날까지 출연한 가수의 점수는 순서대로 socre배열에 저장되어 전달한다

*명예의 전당에 오른 가수의 점수 중, 최하점은 매일 공개된다

*명예의 전당의 최하점은 answer배열에 저장되어 return한다

 

 

 

테스트케이스를 통해 문제에 대해 다시 한번 알아보면

k score
3 [10, 100, 20, 150, 1, 100, 200]

*k=3 명예의 전당에는 최고점 3명의 가수만이 들어갈 수 있다

*k일차까지는 명예의 전당이 꽉 차있지 않으므로, 1일차~k일차의 가수는 무조건 명예의 전당에 오른다

*이후에는 최고점 3명의 가수만이 명예의 전당에 오른다

 

n일차 n일차 가수의 점수 (score) 명예의 전당 (award)
최하점
1 [10, 100, 20, 150, 1, 100, 200] 10 - - 10
2 [10, 100, 20, 150, 1, 100, 200] 100 10 - 10
3 [10, 100, 20, 150, 1, 100, 200] 100 20 10 10
4 [10, 100, 20, 150, 1, 100, 200] 150 100 20 20
5 [10, 100, 20, 150, 1, 100, 200] 150 100 20 20
6 [10, 100, 20, 150, 1, 100, 200] 150 100 100 100
7 [10, 100, 20, 150, 1, 100, 200] 200 150 100 100

*그동안의 최하점은 answer 배열에 저장되어 return된다

* answer = [ 10, 10, 10, 20, 20, 100, 100 ]

 

 

 

🚀 문제 해결(1) push 전 비교 / 통과

1. 명예의 전당에 해당하는 배열 award를 만든다

2. award.length가 k일때까지는 무조건 awrad에 점수를 push한다

3. award.length가 k와 같다면, 최하점과 비교한다

    *award의 최하점보다 점수가 높다면 최하점은 pop하고, 점수는 push한다

4. award를 내림차순 정렬한다

5. award의 최하점을 answer에 push한다

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

    for(var s of score){
        if(award.length < k){
            award.push(s);
        }else{
            if(s>award[k-1]){
                award.pop();
                award.push(s);
            }
        }
        award.sort((a,b)=>b-a);
        answer.push(award[award.length-1]);
    }

    return answer;
}

 

 

🚀 문제 해결(2) push 후 비교 / 통과

1. 명예의 전당에 해당하는 배열 award를 만든다

2. score의 값을 하나씩 꺼내어 award에 push한다

3. socre를 내림차순 정렬한다

4. award의 길이가 k+1이라면 가장 마지막 요소를 pop한다

    *이미 정렬했으므로, 가장 마지막 요소가 명예의 전당에 남아 있을 수 없는 점수

5. 명예의 전당의 최하점을 answer에 push한다

function solution(k, score) {
    var answer = [];
    var award = [];
    
    for(var s of score){
        award.push(s);
        award.sort((a,b) => b-a);
        if(award.length == k+1) award.pop();
        answer.push(award[award.length-1]);
    }
    return answer;
}

 

댓글
«   2024/12   »
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
최근에 올라온 글
글 보관함
Total
Today
Yesterday