🔗 https://school.programmers.co.kr/learn/courses/30/lessons/1845

1. 접근방식 / 설계

N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return.

  1. 최대로 가질 수 있는 폰켓몬 개수 max = N/2 설정.
  2. 가장 많은 종류를 선택해야 하므로 nums 배열의 중복 제거.
  3. 2에서 중복 제거한 nums 의 카운트 distinct 설정.
  4. distinctmax 비교하여 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();
    }
}
  1. nums를 반복하며 각 요소를 HashSet에 추가하여 중복 제거.
  2. hs의 size > 최대 선택 가능한 개수(=max) 이면 max가 우선시 되므로 return max
  3. 이외의 경우 return hs.size()

4. 관련된 개념 공부

🔗 HashSet