import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
// map에 담는다
Map<Integer,Integer> map = new HashMap<>();
for (int i=0;i< tangerine.length;i++) {
int a = tangerine[i];
map.put(a,map.getOrDefault(a,0)+1);
}
// 많은 것 부터 채워야한다
// List로 변형
List<Integer> valueList = new ArrayList<>(map.values());
Collections.sort(valueList,Collections.reverseOrder());
for (int i=0;i< valueList.size();i++) {
k=k-valueList.get(i);
answer++;
if (k<1) break;
}
return answer;
}
}
map을 사용해서 크기에 따라 개수를 센다음에,
개수가 많은 순서대로 k에 채워넣었다.
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
Map<Integer,Integer> map = new HashMap<>();
for(int t:tangerine){
map.put(t,map.getOrDefault(t,0)+1);
}
ArrayList<Integer> list = new ArrayList<>(map.values());
list.sort((o1, o2) -> o2-o1);
for(int i=0;i<list.size();i++){
k -= list.get(i);
answer++;
if(k <= 0)
break;
}
return answer;
}
}
개념 자체는 나와 동일하지만,
리스트를 내림차순으로 정렬 할 때 list.sort((o1, o2) -> o2-o1);
를 사용했다!
처음보는 방식이다.
람다 표현식인 (o1, o2) -> o2-o1은 두 정수인 o1과 o2를 비교하고, o2에서 o1을 빼는 것으로써 요소를 내림차순으로 정렬한다.
(o2에서 o1을 뺀 결과가 양수이면 o2가 o1보다 크므로 o2가 앞으로 가게 되고, 음수이면 o2가 o1보다 작으므로 o2가 뒤로 간다.)