-
문제 경로: 코딩테스트 고득점 Kit > 해시
-
난이도: Level 1
-
URL: https://school.programmers.co.kr/learn/courses/30/lessons/1845
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;
}
} -
nums로 전달받은 폰켓몬 “타입” 들을 Set에 넣어 중복을 제거한다.
-
모든 폰켓몬들의 수를 2로 나눈 값과 중복이 제거 된 Set의 사이즈를 비교한 뒤
-
Set의 사이즈가 크다면 모든 폰켓몬들의 수를 2로 나눈 값이 최대 값이 될 것이고
-
그 외의 경우에는 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() | 배열 변환 | 배열 |