Algorithms/프로그래머스

[프로그래머스][Lv2][Java] 귤 고르기

hyunki.Dev 2023. 2. 11. 15:19

📌 문제 

귤 고르기 - lv2

 

프로그래머스

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

programmers.co.kr

 

 

📌 풀이

  • 알고리즘 보다는 문제의 제약조건 내용대로 구현 하는 문제
  • 고르기로 한 개수인 k개 만큼 고르기 위해 필요한 각 귤의 개수를 알아야 한다.
  • ➡️ 이를 위해 Map 을 사용해야 함
  • Map을 만든 후에는 key-value 에서 value 값에 따라 내림차순 정렬(❗️가장 개수가 많은 귤부터 차감해야 함)
  • 내림차순으로 차감하여 귤을 k개 만큼 다 골랐을 시점이 서로 다른 귤의 종류가 최소일 때이다. 

 

📌 코드

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        HashMap<Integer,Integer> tangerineMap =new HashMap<>();

	//귤 종류의 개수 대로 key-value 형태로 map에 넣어줌
        for (int t : tangerine) {
            tangerineMap.put(t, tangerineMap.getOrDefault(t, 0) + 1);
        }

	//key만 list에 담아준 후
        List<Integer> list = new ArrayList<>(tangerineMap.keySet());
        
        //value 값에 따라 내림차순 정렬
        list.sort((o1, o2) -> tangerineMap.get(o2)-tangerineMap.get(o1));

        for(Integer key:list){
            k -=tangerineMap.get(key);
            answer++;
            if(k<=0){
                break;
            }
        }

        return answer;
    }
}