Algorithm/Programmers

[Programmers] 귤 고르기 / ⭕

cks._.hong 2024. 7. 24. 19:51
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 제출 코드 (10분 23초 / Dictionary, Sort)

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> {
            return o2[1] - o1[1];
        });
        Map<Integer, Integer> list = new HashMap<>();
        
        for(int i = 0; i < tangerine.length; i++) {
            list.put(tangerine[i], list.getOrDefault(tangerine[i], 0) + 1);
        }
        for(Integer key : list.keySet()) {
            pq.add(new int[] {key, list.get(key)});
        }
        int temp = 0;
        while(temp < k) {
            temp += pq.poll()[1];
            answer++;
        }
        return answer;
    }
}

 

2. 구현 로직

  1. 귤 사이즈마다의 개수를 카운트 (딕셔너리 사용)
  2. 개수가 많은 것부터 채워 넣으면 되므로 우선순위 큐를 이용하여 정렬
  3. 우선순위 큐에서 1개 뺀 것을 임시 바구니에 담고 k와 비교
  4. k개보다 작다면 반복하고 크다면 반복문을 종료하고 정답 추출

 

3. 유의할 점

  • 귤의 개수를 딱 맞춰야 하는 줄 알았는데 굳이 그럴 필요가 없다는 것을 알았다.