N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.
- 제한조건
- 가장 많은 종류의 폰켓몬을 선택하는 방법이 여러 가지인 경우에도, 선택할 수 있는 폰켓몬 종류 개수의 최댓값 하나만 return 하면 됩니다.
- Example
- 입출력 예 #1
[3, 1, 2, 3]
의 4마리 중 2마리의 폰켓몬을 선택할 수 있습니다.- 가장 많은 종류의 폰켓몬을 선택하는 것으로, 중복된 번호의 폰켓몬은 필요하지 않습니다.
- 중복된 값을 제거하면
[1, 2, 3]
이지만, 어차피 2마리 밖에 선택하지 못하므로 가장 많은 종류의 폰켓몬을 선택하는 방법은 2마리가 되어 2를 return합니다.- 여기서 알 수 있는 점 : 폰켓몬이 담긴 배열 nums에서 중복을 제거했을 때의 길이와
N/2
의 값을 비교해주어야 한다는 것!
function solution(nums) {
let tmp = nums.sort().filter((v, i) => nums[i] !== nums[i+1]);
return (nums.length / 2) < tmp.length ? nums.length / 2 : tmp.length;
}
📍 풀이과정
- 폰켓몬이 담겨있는
nums
배열을 정리해줍니다.
sort()
로 오름차순 정렬 해주기filter()
로 중복된 값 제거해주기
nums
에서 중복된 값들이 제거된tmp
의 길이와 내가 선택할 수 있는 폰켓몬의 수인N/2
를 비교해줍니다.
- 내가 선택할 수 있는 폰켓몬의 수는
N/2
가 최대입니다.- 따라서
tmp
의 길이가N/2
보다 크면N/2
가 내가 고를 수 있는 최대값이 됩니다.tmp
의 길이가N/2
보다 작으면, 그대로tmp
의 길이가 내가 고를 수 있는 최대값이 됩니다.