owel의 블로그

프로그래머스 문제 풀이 - 폰켓몬 (Java)

태그:
  • PS

문제 링크

프로그래머스 - 폰켓몬

풀이 아이디어

종류가 중복되는 N마리의 폰켓몬 중에서 N/2마리를 골라, 가장 많은 종류 수를 반환하는 문제입니다.

종류 수의 최댓값을 구해야 하므로 먼저 중복을 제거할 필요가 있습니다.
단일값 저장만 필요하고, 순서 유지가 필요 없으므로 HashSet을 사용합니다.

중복을 제거한 종류 수를 기준으로 두 가지의 경우가 있습니다.

  • 종류 수 ≤ N/2: 종류별로 한 마리씩만 골라도 종류 수를 초과하여 고를 수 없기에 종류 수가 답입니다.
  • 종류 수 > N/2: 종류가 아무리 많아도 고를 수 있는 종류의 수가 N/2개로 제한되므로, N/2가 답입니다.

따라서 답은 min(종류 수, N/2)입니다.

정답 코드

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

class Solution {
    public int solution(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) set.add(num);            
        return Math.min(set.size(), nums.length / 2);
    }
}