프로그래머스 js 폰켓몬

이명진·2022년 9월 16일
0

코드카타

목록 보기
42/68

문제 요약

포켓몬 박사에게 포켓몬을 얻어야 하는데 박사는 박사가 포켓몬을 가지고 있는 숫자의 반의 포켓몬을 준다. 포켓몬의 번호로 포켓몬을 알수 있다. 그중에서 중복의 포켓몬을 빼고 가질수 있는 포켓몬 종류를 리턴하면 된다.

내가푼 풀이

function solution(nums) {
  	let limit = nums.length/2
  	let poketBall = [];
  	for(let i=0; i<nums.length;i++){
      let stack = nums[i];
      if(!poketBall.includes(stack)){
        poketBall.push(stack)
      }
    }
    return poketBall.length<limit?poketBall.length:limit;
}

리밋을 정해놓고 주어진 포켓몬 배열을 하나씩 비교해가며 배열에 담는것을 진행했다.
배열에 담을때 중복이 없을때만 넣어주었다.
결과는 올 클리어 하지만 16,17번이 생각보다 시간이 오래걸려서
for문을 돌때 리밋숫자보다 크면 중단하도록 하였다.

수정한 풀이

function solution(nums) {
  	let limit = nums.length/2
  	let poketBall = [];
  	for(let i=0; i<nums.length;i++){
      let stack = nums[i];
      if(poketBall.length>=limit){
        break;
      }
      if(!poketBall.includes(stack)){
        poketBall.push(stack)
      }
    }
  return poketBall.length;
}

시간을 줄이긴했지만 여전히 느리다. 16,17 문제가 30초 정도 걸린다.

다른사람의 풀이

function solution(nums) {
  const max = nums.length / 2;
  const arr = [...new Set(nums)];

  return arr.length > max ? max : arr.length
}

리밋을 정해놓고 new Set을 이용해서 바로 중복을 제거하는 방법을 사용했다.
짧고 간결하다.
시간도 준수하게 풀렸다. 하나씩 비교하지 않고 한번에 중복을 제거하고 결과를 비교해서 이런 결과가 나온것 같다.
1단계문제 중 어려운것 같아서 빼놓고 있었는데 문제만 장황했지 지금보니 쉬운 문제였다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글