알고리즘/프로그래머스

[Java, 자바] 프로그래머스 귤 고르기

차나니 2024. 3. 6. 19:05

프로그래머스 

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

# 난이도 : LV.2


문제내용


제한사항


입출력 예


풀이방법

이번 문제는 우선순위 큐와 Map을 통해서 해결하였습니다 :)

Map을 통해 <귤번호, 개수> 형식으로 데이터를 넣어줍니다.

(다른 문제에서 언급했던 getOrDefault 메서드 사용하기 ! ⭐️잊지마세요)

종류의 수만 구하면 되는 문제이기 때문에 내림차순으로 생성해 놓았던 우선순위 큐에 Map에 누적해 놓은 누적 개수를 모두 저장해줍니다 !

마지막으로 반복문은 k가 0보다 클 때만 실행되고 반복문 안에서 Q에 들어있는 값을 확인한 뒤 k보다 큰 수일 경우 answer을 증가하여 반복문을 탈출해주고 Q의 값이 k보다 작을 경우 k의 값에서 Q의 값을 빼준 이후 다음 반복문을 진행해야합니다.

복잡하지만 생각보다 복잡하지 않은 문제인 것 같아요 ! 다들 화이팅 !


코드

import java.util.*;
class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        PriorityQueue<Integer> Q = new PriorityQueue<>(Comparator.reverseOrder());
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < tangerine.length; i++) map.put(tangerine[i], map.getOrDefault(tangerine[i], 0) + 1);
        for(int key : map.keySet()) Q.offer(map.get(key));
        
        while (k > 0){
            if(Q.peek() > k){
                answer++;
                break;
            } else {
                k -= Q.poll();
                answer++;
            }
        }
        
        return answer;
    }
}