본문 바로가기
코테

[java] 귤 고르기

by 상똥 2024. 1. 11.
풀이
1. 받은 귤의 크기는 key값으로, 그 크기의 개수를 value값으로 하여 map에 저장한다
- for문으로 배열을 돌면서 map에 넣음
2. answer=0, sum=0을 선언한다
- answer : 크기 종류의 수
- sum : 크기 종류를 추가할 때마다 늘어나는 귤의 총 개수
3. list에 map의 value값들을 넣고, 역순으로 정렬한다
- 개수가 많은 것부터 고려해야 종류의 수가 줄어들 수 있기 때문이다
4. for문으로 sum에 value값들을 큰 것부터 더해가며 k와 비교한다. 동시에 answer도 1씩 증가시킨다
- sum이 k보다 커지면 answer 반환 
회고
- getOrDefault 잊지말자,,
코드(접은 글)
더보기
import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int i : tangerine){
            map.put(i, map.getOrDefault(i, 0) + 1);
        }
                
        int answer = 0;
        int sum = 0;
        
        ArrayList<Integer> list = new ArrayList<>(map.values());
        Collections.sort(list, Collections.reverseOrder());
        
        for(int l : list){
            if(sum + l >= k){
                answer++;
                break;
            } else {
                sum += l;
                answer++;
            }
        }
        return answer;
    }
}