nums
폰켓몬의 종류 번호 | [3,1,2,3]
=> N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아 그때의 폰켓몬 종류 번호의 개수를 return
가능한 한마리씩 다른 폰켓몬을 선택하는 것이 이득이므로, map에 폰켓몬을 종류:마리수 로 저장하여, 전체 map 크기와 비교해서 전체 마리수/2 보다 map 크기가 크면 전체 마리수/2를 리턴하도록 했음
import java.util.*;
class Solution {
public int solution(int[] nums) {
int sum = 0;
Map<Integer, Integer> map = new HashMap<>();
for(int num : nums){
sum+=1;
Integer val = map.get(num);
if(val == null){
map.put(num,1);
continue;
}
map.put(num, val+1);
}
return Math.min(map.size(), sum/2);
}
}
=> 앞 테케에서 빠르게 실행이 되는줄 알았으나, 7.88ms라는 굉장히 느린 테케가 있었음
import java.util.*;
class Solution {
public int solution(int[] nums) {
int sum = 0;
Set<Integer> set = new HashSet<>();
for(int num : nums){
sum+=1;
set.add(num);
}
return Math.min(set.size(), sum/2);
}
}
=> 4.37ms 이라는 속도가 굉장히 아쉬웠지만, 더 이상의 개선은 불가능해보였음
TIP : 최솟값 최댓값을 구할 때, Math의 max()와 min()을 쓰는 것 가독성에 좋다.