[LeetCode] 347 Top K Frequent Elements JavaScript
problem-solvingLeetCodeMapFrequency Counter
📌 문제 설명
📌 문제 접근
이런 문제가 손풀기 좋은 문제가 아닐까 생각한다. 그냥 메서드체인으로 문제따라서 바로 풀이할 수 있기 때문이다. 먼저, 빈도수를 계산한다. 다음, 내림차순으로 정리한다. 마지막으로, 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을 만들고, 고유 원소 목록을 빈도 기준으로 정렬합니다.

