🔗 https://school.programmers.co.kr/learn/courses/30/lessons/1845
1. 접근방식 / 설계
N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return.
- 최대로 가질 수 있는 폰켓몬 개수
max = N/2
설정. - 가장 많은 종류를 선택해야 하므로
nums
배열의 중복 제거. - 2에서 중복 제거한
nums
의 카운트distinct
설정. distinct
와max
비교하여return answer
distinct
>=max
일 경우 최대 선택 가능한 수는max
이므로return max
distinct
<max
일 경우 최대 선택 가능한 종류의 수는distinct
이므로return distinct
2. 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Arrays;
class Solution {
public int solution(int[] nums) {
int answer = 0;
int max = nums.length/2; // 최대 고를 수 있는 개수
int distinct = Arrays.stream(nums).distinct().toArray().length; // 중복 제거한 배열의 원소 개수
if(distinct >= max) answer = max;
else answer = distinct;
return answer;
}
}
3. 다른 방식 코드 분석
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.HashSet;
class Solution {
public int solution(int[] nums) {
HashSet<Integer> hs = new HashSet<>();
for(int i =0; i<nums.length;i++) {
hs.add(nums[i]);
}
if(hs.size()>nums.length/2)
return nums.length/2;
return hs.size();
}
}
nums
를 반복하며 각 요소를HashSet
에 추가하여 중복 제거.hs
의 size > 최대 선택 가능한 개수(=max
) 이면max
가 우선시 되므로return max
- 이외의 경우
return hs.size()