귤 고르기

문제


문제 풀이

문제에서 주어는 귤의 종류에 따라 수를 카운팅해서 큰순으로 합하다가 k 랑 같거나 커질때 더한 횟수를 반환하면 되는 문제이다. 


나의 답안

public static int solution(int k, int[] tangerine) {
    int answer = 0;
    int[] countArr = new int[10000001];

    for(int orange : tangerine){
        countArr[orange]++;
    }

    countArr = Arrays.stream(countArr).boxed().sorted((o1, o2) -> o2 - o1).mapToInt(i -> i).toArray();
    int sum = 0;
    for (int count : countArr){
        sum += count;
        answer++;
        if (sum >= k) break;
    }

    return answer;
}

다른 답안

평소에 맵을 정렬하고 싶다는 생각을 몇 번 했었는데 아래 코드와 같은 방식으로 처리를 하고 있는 것을 보고 기억을 해보고자 가져와봅니다. 

        int answer = 0;
        HashMap<Integer,Integer> map =new HashMap<>();

        for (int t : tangerine) {
            map.put(t, map.getOrDefault(t, 0) + 1);
        }

        List<Integer> list = new ArrayList<>(map.keySet());
        list.sort((o1, o2) -> map.get(o2)-map.get(o1));

        for(Integer key:list){
            k -=map.get(key);
            answer++;
            if(k<=0){
                break;
            }
        }

        return answer;

 

'Programmers 문제풀이 > Lv.2' 카테고리의 다른 글

행렬의 곱셈  (0) 2023.04.02
[1차] 캐시  (0) 2023.04.01
괄호 회전하기  (0) 2023.04.01
멀리 뛰기  (0) 2023.03.31
N개의 최소공배수  (0) 2023.03.31