귤 고르기 : https://school.programmers.co.kr/learn/courses/30/lessons/138476
k개의 귤을 판매하려고할 때 귤의 종류를 최소한으로 하기 위해서는 귤의 개수가 많은 귤을 차례로 선택하는 방법이 있습니다.
Trangerine 클래스를 정의하고 해당 크기의 개수를 저장하여 생성합니다.
그리고 Trangerine 객체를 리스트에 저장하고 귤의 개수를 기준으로 오름차순 정렬합니다. 귤의 개수가 많은 크기를 하나씩 꺼내어 k가 0보다 작아직때까지 k에 귤의 개수를 빼주는 것을 반복합니다.
저는 별도의 클래스를 생성했지만, Map으로 구현하신 분도 있었습니다.
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;
}
}
}