728x90

 

해시 문제라 HashSet을 사용하긴 했는데 전체적인 사고방식은 수학 풀이 같습니다.

일단 N 마리의 포켓몬 중에서 N/2 마리의 포켓몬을 선택할 수 있고, 포켓몬의 종류 개수를 P라고 가정하겠습니다.

그렇다면 P가 N/2보다 크다면 가져갈 수 있는 포켓몬의 최대 종류의 수는 N/2의 값이되고

P가 N/2보다 작거나 같다면 가져갈 수 있는 포켓몬의 최대 종류의 수는 P가 됩니다.

 

nums = [피카츄, 피카츄, 파이리, 꼬부기]
hashset = [피카츄, 파이리, 꼬부기]

 때문에 위의 예시처럼 가져갈 수 있는 포켓몬의 수인 2마리보다 포켓몬의 종류 개수가 많다면

그냥 가져갈 수 있는 수를 리턴하면 됩니다. 

 

nums = [피카츄, 피카츄, 피카츄, 파이리, 파이리, 파이리]
hashset = [피카츄, 파이리]

반대로 위처럼 가져갈 수 있는 포켓몬의 숫자가 3마리인데 포켓몬의 종류가 그 숫자보다 적다면

포켓몬 종류의 수를 리턴하면 됩니다.

 

import java.util.*;
class Solution {
    public int solution(int[] nums) {
        int length = nums.length;
        
        Set<Integer> ponketmon = new HashSet<Integer>();
        for(int i: nums){
            ponketmon.add(i);
        }
        
        if((int)length/2 < ponketmon.size()){
            return (int)length/2;
        }else{
            return ponketmon.size();
        }
    }
}

위에 코드는 제 풀이 코드입니다.

728x90

+ Recent posts