[코테/JAVA] 연습문제 : 귤 고르기

    728x90
    반응형

    2022.12.10

    코테 문제풀이 21주차 04번 문제

     

     

    문제

      ① 연습문제 : 귤 고르기

     

       링크

     

    프로그래머스

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

    programmers.co.kr

     

     

    접근방법

      생각해낸 방법은 1가지

      ① Comparator.compare() 메소드를 사용해 HashMap의 Value를 오름차순으로 정렬

     

     

    풀이

      ① 접근방법 :

      ② 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
     
    class Solution {
        /*
         * Date: 2022-12-09
         * Time: 13:54
         */
        public int solution(int k, int[] tangerine) {
            return choiceOrange(k, tangerine);
        }
     
        /*
         * 메소드명: 귤 고르기
         * 1. 귤의 사이즈 별 갯수를 '사이즈=갯수' 형식으로 Map에 담는다.
         * 2. Comparator.compare() 메소드를 오버라이딩해서 Map의 Value(갯수)를 내림차순으로 정렬한다.
         * 3. 갯수가 많은 순으로 k에서 갯수만큼 뺀다.
         * 4. 귤이 담길때마다 담은 횟수를 카운트한다.
         */
        public int choiceOrange(int k, int[] tangerine) {
            Map<Integer, Integer> map = new HashMap<>();
            for (int size: tangerine) {
                if (map.containsKey(size)) {
                    map.put(size, map.get(size)+1);
                } else {
                    map.put(size, 1);
                }
            }
     
            List<Map.Entry<Integer, Integer>> entryList = new LinkedList<>(map.entrySet());
            entryList.sort(new Comparator<Map.Entry<Integer, Integer>>() {
                @Override
                public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
                    return o2.getValue() - o1.getValue();
                }
            });
     
            int output = 0;
            for (Map.Entry<Integer, Integer> entry : entryList) {
                k -= entry.getValue();
                output++;
     
                if (k <= 0break;
            }
            return output;
        }
    }
    cs

     

     

    결과

     

     

    주의사항

      ① 정답으로 리턴해야 하는 int는 종류의 최솟값이다. 반드시 사이즈별로 갯수가 맞아떨어질 필요가 없다.

    728x90
    반응형

    댓글