[프로그래머스] 폰켓몬 - Java

이지연·2025년 12월 14일
post-thumbnail

문제 접근

  1. 가져갈 수 있는 폰켓몬 수 p_num = nums.length / 2 계산.
  2. HashSet전체 폰켓몬 번호를 저장 (중복 자동 제거).
  3. HashSet.size()고유 종류 개수 확인.
  4. 고유 종류수 vs p_num작은 값 반환:
    • 종류가 많으면 → p_num (최대 가져갈 수 있는 수)
    • 종류가 적으면 → 종류수 (모두 가져감)

즉, "전체 → 고유종류세기 → 최대치 비교" 한 번에 해결!


HashSet 자료구조 사용 이유

이 문제는 "최대 종류수"만 구하면 되므로 순서/개수 무관.
HashSet(Hash Table 기반)은:

  • 자동 중복 제거size() = 고유 종류수
  • O(1) 삽입 → N=20,000에서도 초고속
  • 간단 명료 → 로직 한눈에 파악

ArrayList + contains() 대비 100배 효율!

주요 메서드:

  • add(): 중복 없이 추가
  • size(): 고유 원소 개수 반환

시뮬레이션 예시

nums = [3,1,2,3,2]  (총 5마리)
p_num = 5/2 = 2

1. HashSet = {3} → {3,1} → {3,1,2} → size() = 3
2. min(3, 2) = 2

nums = [3,3,3,2,2] (총 5마리)  
p_num = 2
HashSet = {3,2} → size() = 2
min(2, 2) = 2

출력: 2


제출

import java.util.HashSet;
import java.util.Set;

class Solution {
    public int solution(int[] nums) {
        int p_num = nums.length / 2;
        Set<Integer> species = new HashSet<>();
        
        for (int pokemon : nums) {
            species.add(pokemon);
        }
        
        return Math.min(species.size(), p_num);
    }
}
profile
Eazy하게

1개의 댓글

comment-user-thumbnail
2025년 12월 14일

포켓몬협회가 가만히있지않을것입니다

답글 달기