귤 고르기

공부한것 다 기록해·2023년 8월 6일
0

https://school.programmers.co.kr/learn/courses/30/lessons/138476

문재 해결 흐름
제일많이 중복되는 수를 뽑아야 한다!(핵심)
HashMap을 사용해서 중복되는 횟수를 체크한다.
HashMap을 value(중복되는 횟수)순으로 정렬한다.

정렬한 것을 하나씩 탐색하면서 k값에서 빼준다. 동시에 answer++;
k가 0보다 작거나 같은 경우, break를 걸어서 정답을 찾아준다.

 public int solution(int k, int[] tangerine) {
        int answer = 0;

        // 최대한 중복이 많이 되는 수 챙기기
        // 최소한 중복이 없는 수 챙기기

        HashMap<Integer,Integer> map = new HashMap<>();

        for (int i = 0; i < tangerine.length; i++) {
            map.put(tangerine[i],map.getOrDefault(tangerine[i],0)+1);
        }

        // 크기 정렬
        List<Map.Entry<Integer,Integer>> entryList = new ArrayList<>(map.entrySet());
        entryList.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));

        for (Map.Entry<Integer, Integer> entry : entryList){
            if(k<=0) break;
            answer++;
            k -= entry.getValue();
        }

        return answer;
    }

0개의 댓글