프로그래머스 - 귤 고르기

leehyunjon·2022년 11월 30일
0

Algorithm

목록 보기
135/162

귤 고르기 : https://school.programmers.co.kr/learn/courses/30/lessons/138476


Problem


Solve

k개의 귤을 판매하려고할 때 귤의 종류를 최소한으로 하기 위해서는 귤의 개수가 많은 귤을 차례로 선택하는 방법이 있습니다.

Trangerine 클래스를 정의하고 해당 크기의 개수를 저장하여 생성합니다.

그리고 Trangerine 객체를 리스트에 저장하고 귤의 개수를 기준으로 오름차순 정렬합니다. 귤의 개수가 많은 크기를 하나씩 꺼내어 k가 0보다 작아직때까지 k에 귤의 개수를 빼주는 것을 반복합니다.

저는 별도의 클래스를 생성했지만, Map으로 구현하신 분도 있었습니다.


Code

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
class Solution {
    public int solution(int k, int[] tangerine) {
    	//귤 크기에 따른 귤 개수
        int[] tangerineCount = new int[10000001];
        for(int t : tangerine){
            tangerineCount[t]++;
        }
        
        List<Tangerine> tangerineList = new ArrayList<>();
        for(int i=1;i<10000001;i++){
            if(tangerineCount[i] != 0){
                tangerineList.add(new Tangerine(i,tangerineCount[i]));
            }
        }
        
        //개수 기준 오름차순 정렬
        Collections.sort(tangerineList, (Tangerine o1, Tangerine o2)->{
            return o2.count - o1.count;
        });
        
        int answer = 0;
        int idx=0;
        //k가 0보다 작아질때까지 귤의 개수만큼 감소
        while(k>0){
            k -= tangerineList.get(idx++).count;
            answer++;
        } 
        return answer;
    }
    
    class Tangerine{
        int size;
        int count;
        public Tangerine(int size, int count){
            this.size = size;
            this.count = count;
        }
    }
}

Result


Reference

profile
내 꿈은 좋은 개발자

0개의 댓글