정렬을 활용한 알고리즘 문제풀이
입출력
- 입력: 정수 배열과 그 중 많이 사용된 숫자를 뽑아야하는 개수 K가 주어집니다.
- 출력: 많이 사용된 정수 K개가 담긴 배열을 반환합니다.
예제 코드
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) map.put(num, map.getOrDefault(num, 0) + 1);
List<Integer> list = map.entrySet().stream()
.sorted((e1, e2) -> e2.getValue().compareTo(e1.getValue()))
.map(Map.Entry::getKey).collect(Collectors.toList())
.subList(0, k);
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
- 사용 횟수의 경우 Map<Integer, Integer>를 활용하여 개수를 value에 담아주었습니다.
- 그 후 stream을 활용하여 value 값을 기준으로 정렬을 한 뒤
- map을 활용하여 키 값만 모은 후 리스트로 변환한 후 K번째 원소까지 subList합니다.
- 정렬된 리스트를 정수배열로 변환한 후 반환합니다.
회고
- stream을 사용하여 문제를 풀었습니다.
- 내장함수 말고 스스로 함수를 작성해봤으면 어떨까 싶기도 합니다.