프로그래머스. 코딩테스트 고득점 Kit.
해시. 1단계
function solution(nums) {
// 고를 수 있는 폰켓몬의 수
let num = nums.length / 2;
// nums 배열에서 중복되는 번호를 제거한다.
// Set 객체를 배열로 변환해줘야 배열 메서드를 사용할 수 있다.
let set = Array.from(new Set(nums));
// set 배열의 길이와 num이 같다면, 가장 많은 종류는 set 배열의 길이 혹은 num과 같다.
// 다르다면, 가장 많은 종류는 num과 set 배열의 길이 중 작은 값과 같다.
if(num === set.length){
return num;
} else if(num !== set.length){
return Math.min(num, set.length);
}
}
num은 우리가 가져갈 수 있는 폰켓몬의 숫자이다.
set은 입력 데이터 nums에서 중복되는 폰켓몬을 없앤 것이다.
예시를 통해 살펴보자.
입력 데이터 [3,1,2,3]
num = 2
set = [1,2,3] => set.length = 3
최대한 많은 종류를 고른다면 3마리를 뽑을 수 있지만,
가져갈 수 있는 것은 2마리밖에 없으므로
가져갈 수 있는 최대한 많은 종류는 2마리이다.
입력 데이터 [3,3,3,2,2,2]
num = 3
set = [2,3] => set.length = 2
가져갈 수 있는 것은 3마리인데,
최대한 많은 종류를 고른다면 2마리를 뽑는 경우의 수 밖에 없다.
따라서, 최대한으로 다양한 종류는 2마리이다.