728x90

 

 

풀이 - 나의 생각

귤을 골르는데 필요한 건

결국 개수이다.

 

크기는 중요하지 않다.

 

그래서 Map을 사용해서 크기별 개수를 세고

 

개수가 많은 순서대로 정렬한 후

 

K에서 개수를 빼면서

 

사용되는 귤의 크기의 개수를 세면 해결!!!

 

보완할 점은


 

첫째

 

Map에 값을 넣을 때

 

if 문을 사용해서

 

key값에 해당하는게 있는지를 보고 값을 넣었는데

 

그것보다는

 

map.getOrDefault(KEY, DEFAULT_VALUE)를 사용해서

 

해당 값이 있으면

 

key에 해달하는 Value를

 

없으면 본인이 설정한 Default Value를 반환하는 메소드를 활용하면

 

소스의 가독성 및 성능이 올라간다.


 

둘째

 

Map은 정렬이 안되기 때문에

 

List에 Map의 value값을 넣어서 정렬을 하려고 했는데

 

처음에는 반복문을 통해

 

일일이 넣었다.

 

하지만,

 

List<Integer> num_cnt = new List<>(map.values());

 

이렇게 

 

map.values()

 

를 사용하니까

 

소스의 가독성 및 성능이 올라갔다.

 


추가로

 

Array를 안쓰고

 

List를 쓴 이유는 역정렬을 위해서였다.

 

그런 의미에서 기억하자

 

Collections.sort(List Name) => 일반 정렬(오름차순)

Collections.sort(List Name, Collections.reverseOrder()) => 역 정렬(내림차순)

 

코드

 

1차 풀이

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        
        Map<Integer, Integer> map = new HashMap<>();
        for(int num : tangerine){
            if(map.containsKey(num)){
                map.put(num, map.get(num) + 1);
            }else{
                map.put(num, 1);
            }
        }
        
        List<Integer> num_cnt = new ArrayList<>();
        for(int key : map.keySet()){
            num_cnt.add(map.get(key));
        }
        
        Collections.sort(num_cnt, Collections.reverseOrder());
        
        for(int cnt : num_cnt){
            k-=cnt;
            answer++;
            if(k <= 0)  break;
        }
        return answer;
    }
}

 

2차 풀이

import java.util.*;

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

 

 

 

 

다음에 또 봐요

 

+ Recent posts