본문 바로가기

[IT] 코딩테스트/[문제 및 풀이] 프로그래머스

[프로그래머스] 귤 고르기 / 자바(Java)

728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 


해설

문제에서 귤의 크기와 상관없이 크기의 종류가 최소일 때 담으려는 귤의 수를 원하기 때문에

  1. 같은 크기인 귤의 수를 구하고
  2. 내림차순 정렬해주어 k개만큼 귤을 넣었을때 종류의 수를 return

으로 해결할 수 있는 문제입니다.

 

tangerine의 원소의 범위가 길어 배열의 정렬은 시간초과가 날 수 있어 Map을 사용해 특정 크기의 귤 수를 구하고 해당 값으로 List를 만들어 정렬 후 for문을 통해 종류별로 k에서 각 귤의 수를 빼가며 0이하일 때의 종류를 구합니다.

주의점

  • tangerine의 원소의 범위는 1 ~ 10,000,000

코드

import java.util.*;
class Solution {
    public int solution(int k, int[] tangerine) {
        int answer = 0;
        Map<Integer, Integer> m = new HashMap<>();
        for(int t : tangerine){
            m.put(t,m.getOrDefault(t,0)+1);
        }
        
        List<Integer> counter = new ArrayList<>(m.keySet());
        counter.sort((o1,o2) -> m.get(o2).compareTo(m.get(o1)));
        for(int key: counter){
            answer++;
            k -=m.get(key);
            if(k<=0) break;
        }
        return answer;
    }
}
728x90