Solution

import java.util.*;

class Solution {
    
    public int solution(int[] nums) {
        int answer;
        
        Set<Integer> set = new HashSet<>();
        
        for(int num : nums) {
            set.add(num);
        }
        
        if (set.size() >= nums.length/2) {
            answer = nums.length/2;
        } else {
            answer = set.size();
        }
        
        return answer;
        
    }
    
}
  1. nums로 전달받은 폰켓몬 “타입” 들을 Set에 넣어 중복을 제거한다.

  2. 모든 폰켓몬들의 수를 2로 나눈 값과 중복이 제거 된 Set의 사이즈를 비교한 뒤

  3. Set의 사이즈가 크다면 모든 폰켓몬들의 수를 2로 나눈 값이 최대 값이 될 것이고

  4. 그 외의 경우에는 Set의 사이즈가 최대 값이 될 것이다.

Remind

HashSet

Iterable
 └─ Collection
     ├─ List
     │   ├─ ArrayList
     │   ├─ LinkedList
     │   └─ Vector / Stack

     ├─ Set
     │   ├─ HashSet
     │   ├─ LinkedHashSet
     │   └─ SortedSet
     │       └─ NavigableSet
     │           └─ TreeSet

     └─ Queue
         ├─ PriorityQueue
         └─ Deque
             ├─ ArrayDeque
             └─ LinkedList

Set은 Collection 인터페이스를 상속받는 인터페이스이고, HashSet은 Set의 구현체 중 하나이다.

public interface Set<E> extends Collection<E>

주요 메서드

메서드설명반환값
add(e)값 추가추가 성공 여부
remove(e)값 삭제삭제 성공 여부
contains(e)값 존재 확인boolean
size()개수 확인int
isEmpty()비어 있는지 확인boolean
clear()전체 삭제void
addAll(c)여러 값 추가변경 여부
removeAll(c)여러 값 삭제변경 여부
retainAll(c)공통 값만 남김변경 여부
containsAll(c)전부 포함하는지 확인boolean
iterator()반복자 반환Iterator<E>
toArray()배열 변환배열