[프로그래머스] 폰켓몬

2023. 3. 2. 14:04Algorithm

n개의 폰켓몬의 종류번호가 주어짐 [3,1,2,3] 처럼, 이 중 n/2개의 폰켓몬을 가져갈 수 있을 때

가장 많은 종류의 폰켓몬을 가져갈 때, 종류의 수 return

 

폰켓몬을 종류별로 나누었을 때,

만약, 종류의 수가 n/2보다 크다면 가져갈 수 있는 종류의 수는 n/2일 것이다.

만약, n/2가 종류의 수보다 크다면 가져갈 수 있는 종류의 수는 전체 종류 수 일 것이다.

=> n/2와 폰켓몬 종류의 수 중 더 작은 값을 return !

 

해시를 사용해서 푼!

function solution(nums) {
    let map = new Map()
    for(let i =0; i<nums.length; i++){
        map.set(nums[i], (map.get(nums[i])||0)+1)
    }
    return nums.length/2>map.size?map.size:nums.length/2
}

 

생각해보니, 폰켓몬의 종류의 수만 구하면 되는 것!....

더 간단히 set을 사용하여 풀 수 있다.

set의 중복 값을 가지지 않는다는 특성을 사용하였다.

function solution(nums){
    let set = new Set(nums)
    return nums.length/2>set.size?set.size: nums.length/2
}