Algorithm/Programmers

[Lv.2] 귤 고르기 : Java / HashMap 함수

say! 2026. 2. 2. 22:58
728x90
 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

종류 수를 최소화 > 개수 많은 크기부터 채우기

 

#예시

k=4, [1, 3, 2, 5, 4, 5, 2, 3]

 

1.크기별 개수 구하기 > 해쉬맵 이용

[1,1], [2,2], [3,2], [4,1], [5,2]

 

2.개수만 뽑아서 내림차순하기 : 크기 필요X

2, 2, 2, 1, 1

 

3.k개 이상 채우기

 

#HashMap 관련 함수

getOrDefault(key, defaultValue) : key가 있으면 해당 값 반환하고 없으면 기본값(defaultValue) 반환

put(key, value) : 값 넣기 (덮어쓰기)

get(key) : 값 가져오기

containsKey(key) : 키 존재 여부 확인

keySet() : 모든 키

values() : 모든 값

entrySet() : 키, 값 한 번에 

size()

 

-정답 코드

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        
        Map<Integer, Integer> cnt = new HashMap<>();  // 크기별 개수 저장
        for(int t : tangerine){
            cnt.put(t, cnt.getOrDefault(t, 0)+1);
        }
        
        // 개수만 뽑아내기
        ArrayList<Integer> list = new ArrayList<>(cnt.values());
        // 개수 내림차순
        list.sort(Collections.reverseOrder());
        
        //k개 채우기
        int sum=0;
        for(int l : list){
            sum+=l;
            answer++;
            if(sum >= k){
                //k개 이상 채운 경우 종료
                break;
            }
        }
        
        return answer;
    }
}