[ 다먹살 ]/- Coding

[프로그래머스] 레벨3 귤 고르기

엉망으로살기 2023. 4. 18. 09:41
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/138476

 

프로그래머스

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

programmers.co.kr

 

확실히 내부 라이브러리를 많이 알아야 알고리즘 문제 푸는데 도움이 되는 것 같다. 모르면 못푼다라는 느낌보다는 알면 훨씬 더 효율적이고 쉽고 풀 수 있는건 확실하기 때문이다.

이 문제는 HashMap을 활용하면 되는데, 귤의 크기를 key로 잡아서 입력받은 귤을 크기별로 구분해서 갯수를 value에 저장한 후, 정렬해서 해결하면 된다. 이 과정에서 Map을 Entry형태의 List로 만들어서 정렬하는 방법을 새로 익히게 되었다. 특이한건 이 문제는 되게 테스트케이스가 많다.

 


문제 및 입출력


코드

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.HashMap;

class Solution
{
public static int solution(int k, int[] tangerine)
    {
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        int answer = 0;
        
        for(int i=0; i<tangerine.length; i++)
        {
            if(map.containsKey(tangerine[i]))
            {
                map.put(tangerine[i], map.get(tangerine[i])+1);
            }
            else
            {
                map.put(tangerine[i], 1);
            }
        }
        
        List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
        list.sort(new Comparator<Map.Entry<Integer, Integer>>()
        {
          @Override
          public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2)
          {
               return o2.getValue()-o1.getValue();
          }
        });
        
        for(Entry<Integer, Integer> l : list)
        {
         if(k<=0)
         {
              break;
         }
         else
         {
              k -= l.getValue();
              answer++;
         }
        }
        
        return answer;
    }

}

반응형