Koala - 9기/코딩테스트 준비 스터디

[프로그래머스/java] 폰켓몬

player-geun 2023. 2. 11. 15:52

문제 분석

해당 문제의 경우, 서로 다른 폰켓몬의 종류가 내가 선택해야 할 폰켓몬 보다 작을 경우에는 폰켓몬의 종류를 모두 고르고 부족한 폰켓몬은 중복된 종류의 폰켓몬을 선택하고, 내가 선택해야 할 폰켓몬 보다 크거나 같은 경우 서로 다른 폰켓몬을 모두 고르면 된다. 

집합에 해당 배열의 폰켓몬을 넣어줌으로써 중복을 제거했다. 중복을 제거하면 입력받은 폰켓몬의 종류를 알 수 있다.

시간복잡도의 경우 set에 집어넣는 O(n)이 소요되므로, nums 길이의 최대값인 10,000 들어와도 충분히 시간안에 돈다.

 

문제 풀이

import java.util.*;

class Solution {
    
    static Set<Integer> set;
    
    public int solution(int[] nums) {
        int choiceNumber = nums.length / 2;
        int typeNumber = countPoketmonType(nums);
        
        if(choiceNumber > typeNumber) {
            return typeNumber;
        } 
        
        return choiceNumber;
    }
    
    public static int countPoketmonType(int[] nums) {
        set = new HashSet<>();
        
        for(int i = 0; i < nums.length; i++) {
            set.add(nums[i]);
        }
        
        return set.size();
    }
}