[Leetcode #347] Top K Frequent Elements

[Leetcode #347] Top K Frequent Elements

Leetcode #347 : Top K Frequent Elements

Majority Element


알고리즘을 푸는 스타일은 사람마다 다 다르므로 이것 또한 저의 주관적인 풀이 입니다.

문제 설명

숫자가 남긴 배열 nums와 숫자 k 가 주어진다. 같은숫자가 많은 순서대로 k 만큼 리턴하라.

원문

Given an integer array nums and an integer k,
return the k most frequent elements. You may return the answer in any order.


예제

  • Example 1:
    Input: nums = [1,1,1,2,2,3], k = 2
    Output: [1,2]
    
  • Example 2:
    Input: nums = [1], k = 1
    Output: [1]
    

풀이

// file : "solution.js"
var topKFrequent = function(nums, k) {
  const map = new Map() // #1
  for(n of nums){
    map.set(n, map.get(n)+1 || 1) // #2
  } 
    return [...map].sort((a,b)=>b[1]-a[1]).map(el=>el[0]).slice(0,k) // #3
};

설명

  1. map의 변수에 Map()을 선언 해 준다.
  2. map에 키값으로 n을 대입하고 밸류값으로 n이 존재하면 +1 해주고 없으면 1을 선언 해 준다.
  3. 스프레드 연산자로 map을 배열로 만들어 준 후 밸류값을 기준으로 내림차순으로 바꾸어 준다.
    그 후 키 값만 걸러내기위해 map 배열 함수로 key값만 뽑아 낸후 인덱스 0부터 k만큼 잘라준다.

회고

이전에 map을 사용한 적이 있어서 바로 map이 생각났다. 객체를 잘 사용할 줄 알아야하는데
자꾸 다른 메소드를 쓰는거 같아 좀 그렇지만 ㅠㅠㅠㅠㅠ
map의 메소드인 entries(), keys(), value()를 쓰고싶은데 잘 적용하지 못하였다ㅠㅠ
알고리즘은 이처럼 풀기 쉬운게 나오면 재미있는데……. 계속 어렵겠지..


© 2022.02 by sunnyfterrain