문제
매일 가수가 한명씩 출연한다.
출연한 가수가, 지금까지 출연했던 가수들의 점수중 상위 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 |
---|
댓글