ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스 1단계] 명예의 전당 (1)
    알고리즘 2024. 2. 29. 09:51

    ❓문제 설명

    • 명예의 전당이라고 수를 배열에 하나씩 추가하다가 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할지 말지 하는 것이 좀 더 계산을 할 요소가 줄어들지 않을까? 생각을 해서 나중에는 이러한 방법을 사용해봐야겠다.

    댓글

Designed by Tistory.