ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 폰켓몬 (알고리즘)
    알고리즘 2021. 8. 28. 18:01

     

    내 풀이법

    문제해석

    박사님이 갖고 있는 폰켓몬 중 절반을 가져갈 수 있습니다. 그 중 최대 고를 수 있는 포켓몬 종류의 수를 구하세요!

     

    내가 생각한 풀이법

    1. 배열 내(박사님이 갖고 있는 폰켓몬)에 중복되는 종류를 삭제한다. -> Set() 값을 구하자
    2. 중복되지 않은 폰켓몬들의 수와 내가 최대 고를 수 있는 수를 비교하며 값 도출

     

    나의 코드

    function solution(nums) {
      const set = new Set(nums);
      const type = [...set];
      const limit = nums.length / 2;
      let answer = 0;
    
      type.length >= limit ? (answer = limit) : (answer = type.length);
    
      return answer;
    }

    코드특징

    • const set = new Set() 해당 값은 Set 오브젝트를 리턴하기에 손쉽게 배열 구조로 값을 넣기에
      let type = [...set] 구조 분해 할당 문법을 사용
    • type 값이 limit 보다 크거나 동일하면 answer = limit 만약 아니면 answer = type.length

     

    성능

     

    다른사람 풀이 #1

    function solution(nums) {
        var answer = 0;
        var arr = [];
        nums.forEach(a=>{
            if(!arr.includes(a)) {
               arr.push(a);
             }
        });
        return arr.length < nums.length/2 ? arr.length : nums.length/2;
    }

    코드특징

    • new Set() 대신 filter을 사용

     

    성능

    성능특징

    • filter을 사용하는 것이 오히려 성능 감소로 이어졌다!
    • reduce로 사용한 풀이 방법도 filter와 비슷한 풀이시간이 나와 new Set() 사용하는 것보다 성능이 낮은 것은 확인했다

     

    오늘 배운 점

    • 오브젝트 생성을 하면 성능이 안좋아질 것이라 생각했지만, 오히려 성능이 더 좋게 나와 놀랐다. 이제부터 new Set()를 필요시 거리낌 없이 잘 사용할 수 있을 것 같다!

    '알고리즘' 카테고리의 다른 글

    다리를 지나는 트럭  (0) 2021.09.13
    스킬트리  (0) 2021.09.11
    영어 끝말잇기  (0) 2021.09.09
    구명보트  (0) 2021.09.08
    기능개발  (0) 2021.09.01
Designed by Tistory.