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값을 할당하면 답이 된다.
없음
#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL