문제 및 제한사항
나의 풀이
이 문제를 보자마자 같은 종류의 포켓몬이 몇 마리인지는 중요하지 않다는 생각이 들었다.
생각해본 문제 풀이는 아래와 같다.
1. nums의 중복을 없앤다.
2. 중복을 없앤 새로운 배열을 만든다.
3. 새로운 배열이 nums의 길이보다 길경우 nums의 길이/2를 리턴, 아닐경우 새로운 배열의 길이를 리턴
문제 풀이는 구상한 방식과 똑같은 형태로 진행해주었다.
문제 풀이를 조금 간단하게 설명해보자면 우리는 최대한 많은 종류의 포켓몬을 가져와야 하기 때문에 똑같은 포켓몬을 가져오지 않도록 중복을 없애주었다.
또한 최대로 많이 뽑을 수 있는 수가 nums.length/2 이므로 중복을 제거한 배열이 nums.length/2보다 크다면 nums.length/2가 최대로 뽑을 수 있는 포켓몬의 수가 된다.(arr.length가 더 크다는 말은 내가 뽑을 수 있는 종류보다 더 많은 종류의 포켓몬이 존재한다는 말이기 때문). 반대로 중복을 제거한 배열이 nums.length/2보다 작다면 arr.length가 내가 최대로 뽑아올 수 있는 포켓몬의 수가 된다.(뽑을 수 있는 포켓몬의 종류가 한정적이기 때문에 그 모든 종류의 포켓몬을 뽑아오는 것임. 물론 포켓몬이 중복되어 뽑힐 수 있음. 왜냐하면 내가 뽑을 수 있는 기회보다 포켓몬의 종류가 적기 때문에!)
function solution(nums) {
let noDuplicate = new Set();
let arr = [];
nums.forEach((el)=>{
noDuplicate.add(el);
})
arr = [...noDuplicate];
if(arr.length>nums.length/2){
return nums.length/2;
} else {
return arr.length;
}
}
'Algorithm' 카테고리의 다른 글
소수 찾기 [프로그래머스] (0) | 2023.10.29 |
---|---|
과일 장수 [프로그래머스] (1) | 2023.10.22 |
2016년 [프로그래머스] (1) | 2023.10.20 |
카드 뭉치 [프로그래머스] (1) | 2023.10.19 |
명예의 전당(1) [프로그래머스] (1) | 2023.10.19 |