💡 문제 파악
포켓몬의 종류가 담긴 배열 nums
가 있고 이 배열의 길이를 이용해 최댓값(nums / 2)을 구할 수 있다.
알고리즘 풀이 순서
- 최대값을 구하기 위해 주어진 배열 nums의 length를 2로 나눈 값을 max에 대입한다.
- 중복을 제거한 값을 구하기 위해
Set
을 이용해서 nums에 있는 값들을 담아준다.
→ 이때, Set은 집합 기반이기에 중복을 알아서 제거하며, 빠른 탐색을 위해HashSet
을 이용하였다. - 중복을 제거한 Set의 크기가 max보다 크면 max를, 작으면 Set 사이즈를 리턴한다.
풀이
import java.util.HashSet;
public class Solution {
public int solution(int[] nums) {
// 총 수에 2를 나눔
int max = nums.length / 2;
// 중복을 제거하는 Integer Set 생성
HashSet<Integer> hashSet = new HashSet<>();
// Set에 데이터를 넣음으로서 중복된 데이터를 제거 한다
for (int n : nums) {
hashSet.add(n);
}
// 중복을 제거한 Set의 크기가 max보다 크면 max, 작으면 set 사이즈 리턴
if (max >= hashSet.size()) {
return hashSet.size();
} else {
return max;
}
}
}
다른사람의 풀이
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)));
}
}
'📚 Data Architect > Programmers' 카테고리의 다른 글
고득점 Kit - Stack & Queue (같은 숫자는 싫어) (0) | 2023.04.10 |
---|---|
고득점 Kit - Hash (베스트 앨범) (0) | 2023.04.10 |
고득점 Kit - Hash (위장) (0) | 2023.04.10 |
고득점 Kit - Hash (전화번호 목록) (0) | 2023.04.10 |
고득점 Kit - Hash (완주하지 못한 선수) (0) | 2023.04.10 |