❓문제 설명
- 명예의 전당이라고 수를 배열에 하나씩 추가하다가 length가 k만큼 된다면 이후로는 명예의 전당에 있는 최소값보다 큰수가 추가될 시 명예의 전당에서 교체되는 것임 이때 수가 추가될 때마다 커트라인을 배열에 추가해서 그 배열의 최종 값을 보여주면 됨
✅ 문제 해결
function solution(k, score) {
// 명예의 전당 배열
const honor = []
// 결괏값
const result = []
// 모든 점수 순회
for(let i = 0 ; i < score.length ; i ++) {
// 명예의 전당 기본 셋팅
if(i < k) {
honor.push(score[i])
}
// 이번 점수가 명예의 전당 최하위 점수보다 큰 경우
if(score[i]>Math.min(...honor)) {
// 가장 작은 수를 이번 점수와 교체 후 내림차 순 정렬
honor.pop()
honor.push(score[i])
honor.sort((a,b) => b-a)
}
// 결괏값에 명예의 전당 중 최하위 점수 입력
result.push(honor.at(-1))
}
return result
}
🔥 인상 깊은 남의 풀이
function solution(k, score) {
var answer = [];
return score.reduce((acc, cur) => {
answer.push(cur);
answer = answer.sort((a, b) => b - a).slice(0, k);
return [...acc, Math.min(...answer)];
}, []);
}
❕느낀점
- 문제 해결과 비슷한 방식으로 풀었는데 어떤 부분에서 문제가 일어났는지 확인이 잘 안되서 분석하다가 이전 값을 날려먹었다.... 아쉬움이 많이 남지만 인상 깊은 풀이를 보면서 반성을 하게 되었다.
- 배열에 대해서 reduce를 이용해서 추가를 하는 방식을 보고 반복문을 reduce를 통해서 구현을 하는 방식도 있다는 것을 느꼈다.
- 사실 stack을 쌓고 내림차순으로 한 뒤 사용하는 방식도 좋지만 배열을 유지하면서 push할지 말지 하는 것이 좀 더 계산을 할 요소가 줄어들지 않을까? 생각을 해서 나중에는 이러한 방법을 사용해봐야겠다.