[프로그래머스] 레벨3 귤 고르기
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;
}
}