- 내 방법 풀이
- 간단한 수학 문제였다.
- 설명이 길지만 요점은 박사님 연구실에 있는 폰켓몬 중 N / 2 마리를 데려갈 때 가장 많이 데려갈 수 있는 종류의 수를 구하면 되는 문제였다. HashMap에 키가 중복되지 않는 점을 이용해, 폰켓몬 번호를 key로 value를 넣었다.
- HashMap의 사이즈가 곧 폰켓몬의 종류 수이므로, 종류수보다 N / 2가 작다면 해쉬 사이즈 리턴.
종류수가 (N / 2)보다 크다면 N / 2 를 리턴하도록 했다.
import java.util.*;
class Solution {
public int solution(int[] nums) {
int answer = 0;
// 종류를 검사하여 해쉬에 넣기. 키값은 중복 안되므로, 해쉬의 사이즈 == 폰켓몬 종류 갯수
// (폰켓몬 종류 갯수 < N / 2) 라면 해쉬 사이즈 리턴
// (폰켓몬 종류 갯수 >= N / 2) 라면 N / 2 리턴.
HashMap<Integer, Integer> phonket = new HashMap<>();
for (int i : nums) {
phonket.put(i, 1);
}
if (phonket.size() < nums.length / 2) return phonket.size();
else return nums.length / 2;
}
}
- 다른 사람 방법 풀이 (HashSet 사용)
- HashSet을 사용하여 풀었다.
- 나는 HashMap이 익숙하여, HashMap으로 풀었지만 HashSet이 더 용이한 풀이었다.
- HashMap과 HashSet의 차이는 value의 지정 유무다. HashMap은 value를 직접 입력하지만, HashSet은 자바에서 임의지정하여 저장한다. 둘 다 key의 중복을 허용하지 않기 때문에 Hash를 통해 폰켓몬의 종류 수를 알아내는 것은 결과적으로 같다.
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();
}
}