해시 맵을 사용하여 문제를 해결할 수 있다.
문제를 쭉 읽어보고 작성한 문제 풀이 흐름은 다음과 같다.
같은 종류 번호에 대해 해시 맵으로 저장한 다음, 해시 맵의 키만 가져와서 카운트하면 되지 않나? 라는 생각이 들었다.
근데 가져갈 수 있는 폰켓몬 수가 최대 N / 2 개이니까, 가져간 개수가 N / 2가 넘는 경우 N / 2에 맞춰주면 된다고 생각이 들었다.
import java.util.HashMap;
class Solution {
public int solution(int[] nums) {
int answer = 0;
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int num : nums) {
hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
}
for (Integer key : hashMap.keySet()) {
answer++;
}
if ((nums.length / 2) < answer) {
answer = nums.length / 2;
}
return answer;
}
}
제출하니 문제 없이 잘 통과는 했는데, 제출하고 나서 다른 사람 풀이를 보니 HashSet을 사용해서 처음부터 중복을 허용하지 않고 원소를 추가하였다.
Set을 사용하면 더욱 간단하게 해결할 수 있는데, 해시 맵을 사용해야 한다는 강박?에 괜히 사로잡혀서 푼 것 같다. 앞으로는 문제 접근을 할 때 좀 더 유연하게 생각하는 능력을 키워야 겠다...