귤 고르기 (자바)

김재현·2023년 12월 19일
0

알고리즘 풀이

목록 보기
58/90

문제

정답 코드

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        
        // map에 담는다
        Map<Integer,Integer> map = new HashMap<>();
        for (int i=0;i< tangerine.length;i++) {
            int a = tangerine[i];
            map.put(a,map.getOrDefault(a,0)+1);
        }

        // 많은 것 부터 채워야한다
        // List로 변형
        List<Integer> valueList = new ArrayList<>(map.values());
        Collections.sort(valueList,Collections.reverseOrder());

        for (int i=0;i< valueList.size();i++) {
            k=k-valueList.get(i);
            answer++;
            if (k<1) break;
        }
        
        return answer;
    }
}

map을 사용해서 크기에 따라 개수를 센다음에,
개수가 많은 순서대로 k에 채워넣었다.

다른 사람 코드

import java.util.*;
class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        Map<Integer,Integer> map = new HashMap<>();
        
        for(int t:tangerine){
            map.put(t,map.getOrDefault(t,0)+1);
        }

        ArrayList<Integer> list = new ArrayList<>(map.values());
        list.sort((o1, o2) -> o2-o1);

        for(int i=0;i<list.size();i++){
            k -= list.get(i);
            answer++;
            if(k <= 0)
                break;
        }
        
        return answer;
    }
}

개념 자체는 나와 동일하지만,
리스트를 내림차순으로 정렬 할 때 list.sort((o1, o2) -> o2-o1); 를 사용했다!
처음보는 방식이다.

람다 표현식인 (o1, o2) -> o2-o1은 두 정수인 o1과 o2를 비교하고, o2에서 o1을 빼는 것으로써 요소를 내림차순으로 정렬한다.
(o2에서 o1을 뺀 결과가 양수이면 o2가 o1보다 크므로 o2가 앞으로 가게 되고, 음수이면 o2가 o1보다 작으므로 o2가 뒤로 간다.)

profile
I live in Seoul, Korea, Handsome

0개의 댓글