찾아라 프로그래밍 마에스터
🔥 폰켓몬 🔥
당신은 폰켓몬을 잡기 위한 여행 중✈️
드디어 홍박사의 연구실에 도착❗️
박사님은 연구실에 있는 총 n마리의 폰켓몬 중에서 n/2마리를 가져가도 좋다고 한다. 폰켓몬은 종류에 따라서 번호룰 붙여 구분한다.
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 한다.
N마리의 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아 그때의 폰켓몬 종류 번호의 개수를 return하는 solution을 완성해보자
nums | result |
---|---|
[3,1,2,3] | 2 |
[3,3,3,2,2,4] | 3 |
[3,3,3,2,2,2] | 2 |
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] nums) {
int answer = 0;
List<Integer>list = Arrays.stream(nums)
.boxed()
.collect(Collectors.toList());
list = list.stream().distinct().collect(Collectors.toList());
if(nums.length/2 >list.size()){
answer = list.size();
}else{
answer= nums.length/2;
}
return answer;
}
}
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] nums) {
return Arrays.stream(nums)
.boxed()
.collect(Collectors.collectingAndThen(Collectors.toSet(),
phonekemons -> Integer.min(phonekemons.size(), nums.length / 2)));
}
}
더 간결해보이는 이유는 중복을 제거하는 코드를 따로 넣지 않고 Collectors에서 toList가 아니라 toSet을 통해서 중복을 제거했기 때문이다.
그리고 Integer.min을 이용해서 폰켓몬의 사이즈와 가져갈 수있는 폰켓몬 중 최소값을 리턴하도록 했다.