본문 바로가기
  • 삽질하는 자의 블로그
CS와 언어, 라이브러리 이론

4. [실전] - 명예의 전당(1)

by 이게뭐당가 2023. 1. 18.

문제

매일 가수가 한명씩 출연한다. 
출연한 가수가, 지금까지 출연했던 가수들의 점수중 상위 k 번째 이내에 들게 되면 
가수의 점수를 명예의 전당에 올린다.

    즉, 시작 이후, k일 까지는 모든 출연 가수의 점수가 명예의 전당에 올라간다.
    k일 다음부터는 출연 가수의 점수가 기존 명예의 전당(k순위까지 있는) 의 점수보다 높으면, 
    출연 가수는 명예의 전당에 오른다.
    기존 k번째 순위인 점수는 명예의 전당에서 내려온다.
    "발표 점수"는 k번째 순위중 최하위 점수이다.

    매일 발표된 명예의 전당의 순위중 "최하위 점수를 return" 하라

예시

            k는 3일경우 (기록되는 순위가 3등까지)

                일차    1       2       3       4       5       6       7
                
                점수    10      100     20      150     1       100     200   

              명예전당  10      100     100     150     150     150     200
                                10      20     100     100     100     150
                                        10      20      20     100     100

              발표점수  10      10      10      20      20      100     100

              =================================================================
              
              
k	score	                                        result (최하위점수)
3	[10, 100, 20, 150, 1, 100, 200]	                [10, 10, 10, 20, 20, 100, 100]
4	[0, 300, 40, 300, 20, 70, 150, 50, 500, 1000]	[0, 0, 0, 0, 20, 40, 70, 70, 150, 300]

 

프로세스

1. score 가 들어온다 날짜별로             [2] , [2, 10], [2, 10, 3], [2,10,3, 50] ...

2. 날짜별로, 점수를 k 만큼 오름차순 정렬한다. [2], [10,2],  [10,3,2] , [50,10,3] ... k=3 일경우

3.  오름차순 정렬한 것 중에, 최소값만 뽑는다  2   ,2      , 2     ,   3

4.  최소값을 Array에 날짜별로 담는다. [2,2,2,3]

** slice 는 새 배열을 반환하므로 가능한 일이다. splice 는 원본배열을 조작해서 안된다.
** slice 를 처음부터 원하는 위치까지 받기 위해서는 0 부터 "1까지" 해야 "하나", 0부터 2까지 하면 "두개"가 된다.
	0~0 라고 0인덱스를 반환하지 않고 0~1 을 해야 0 인덱스를 반환하는 것이다.

 

사용

1. sort()
2. slice()
3. Math.min()

 

내코드

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

    for (i = 0; i < score.length; i++) {
        const x = score
            .slice(0, i + 1)                            // 처음 slice 로 날짜별 정리
            .sort((a, b) => (a < b ? 1 : -1))           // 두번째, 날짜별로 정리된 것을 점수 순으로
            .slice(0, k);                               // 정렬 후, 값 3개 나열
        answer.push(Math.min(...x));
    }
    return answer;
}

 

'CS와 언어, 라이브러리 이론' 카테고리의 다른 글

9. [실전] - 택배상자  (1) 2023.01.18

댓글