<Demopeu/>

[LeetCode] 347 Top K Frequent Elements JavaScript

[LeetCode] 347 Top K Frequent Elements JavaScript

problem-solvingLeetCodeMapFrequency Counter

📌 문제 설명

Top K Frequent Elements 문제 보기

📌 문제 접근

이런 문제가 손풀기 좋은 문제가 아닐까 생각한다. 그냥 메서드체인으로 문제따라서 바로 풀이할 수 있기 때문이다. 먼저, 빈도수를 계산한다. 다음, 내림차순으로 정리한다. 마지막으로, k개만큼 잘라서 반환한다.

이번, 면접에 어쩔 때, Set을 쓰고, 어쩔 때 Map을 쓰는지 국룰 패턴 질문을 받았다. 나도 이번에 Map을 사용했는데,

개인적으로,

Set은 중복 제거, 존재 여부 체크, 방문처리 등에 사용한다. Map은 키-값 쌍으로 데이터를 저장할 때 사용한다.

그리고 객체 자체를 키로 사용하고 싶을 때 Map을 사용한다. 또한, Object와 비교하여 has() 메서드를 사용할 수 있다. 그리고 순서도 보장된다.

📌 내가 작성한 코드

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
const topKFrequent = (nums, k) => {
    return [...nums.reduce((map,num)=>{
        map.set(num,(map.get(num)|| 0)+1);
        return map;
    },new Map())].sort((a,b)=>b[1]-a[1]).slice(0,k).map(e=>e[0])
};

📌 시간 복잡도

O(N log N) - nums를 한 번 순회해 빈도 Map을 만들고, 고유 원소 목록을 빈도 기준으로 정렬합니다.

📌 참고 링크