99클럽 코테 스터디 32일자 TIL +top-k-frequent-elements

이월(0216tw)·2024년 6월 20일
0

99클럽/알고리즘풀이

목록 보기
30/38

문제 출처

https://leetcode.com/problems/top-k-frequent-elements (leetcode)

학습 키워드

정렬

시도 방법

먼저 배열 내 숫자값들의 빈도를 파악하기 위해 HashMap을 활용했다.
{key : value} 를 통해 해당 key가 있으면 value를 + 1 하는 전략을 취했다.

두번째로
ArrayList< Map.Entry<Integer , Integer>> 자료형을 만들었고
저장된 값들을 정렬하기 위해 sort를 사용하되 내부적으로 람다식을 이용해 Comparator를 구현했다.

그 후 결과를 크기가 k인 배열에 큰 순서대로 저장했다.

내가 작성한 코드

class Solution {
    public int[] topKFrequent(int[] nums, int k) {


        //배열의 값을 각각 카운트 한다. 
        HashMap<Integer , Integer> map = new HashMap<>(); 
        for(int i = 0 ; i<nums.length; i++) {
            
            if(map.get(nums[i]) == null) {
                map.put(nums[i] , 1); 
            } else {
                map.put(nums[i] , map.get(nums[i])+1);
            }
        }
        
        //value 를 기준으로 정렬된 리스트 생성 
        ArrayList<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
        
        // Comparator를 사용하여 값 기준으로 역순 정렬
        list.sort((entry1, entry2) -> entry2.getValue().compareTo(entry1.getValue()));

        int[] result = new int[k]; 

        for(int i = 0 ; i<k; i++) {
            result[i] = list.get(i).getKey(); 
        }

        return result  ;
    }
}

코드설명

배열의 key가 있으면 value + 1을 했고 없으면 새롭게 추가하면서 value = 1을 했다.

그리고 나서 Map.Entry<Integer , Integer> 의 데이터를 ArrayList에 저장하여 리스트로 정렬처리했다.

그럼 해당 list는 value를 기준으로 역순 정렬이 되어있을 것이고
이에 대해 K만큼 key값을 할당하면 답이 된다.

출력결과


새롭게 알게된 점

없음

다음에 풀어볼 문제 - reordered-power-of-2



#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL

profile
Backend Developer (Financial)

0개의 댓글