ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Day 5. Are they the "same"? [6kyu]
    Web/자바스크립트 2023. 3. 5. 20:42

    두 개의 배열이 주어졌을 때, 첫 번째 배열의 숫자를 제곱한 값이 두 번째 배열의 숫자가 맞을 경우 true를 반환하는 로직

    제약사항

    1. 동일한 숫자가 있을 경우, 제곱 값도 동일한 갯수만큼 두 번째 배열에도 존재해야 함

    2. null 이나 undefined 등등 정상적인 값이 들어오지 않을 경우 바로 false를 반환

    내 답안

    배열 두 개를 정렬해서 for 문을 돌면서 하나라도 다른 값이 나오면 바로 false를 반환하도록 함

     

    function comp(array1, array2) {
      if(!array1 || !array2) return false;
      
      const compare = (a, b) => a - b;
    
      array1 = array1.sort(compare);
      array2 = array2.sort(compare);
    
      for (let i = 0; i < array1.length; i++) {
        if (array1[i] * array1[i] !== array2[i]) return false;
      }
      
      return true;
    }

    다른 코드들도 비슷하게 정렬을 하고, 비교를 했는데 아래 코드는 정말 깔끔하게 한 줄로 정리가 되어 있어서 

    다른 사람 답

    엄청 심플하다.

    왜 !!를 썼나 했더니 a가 null일 경우, !a는 true가 된다. 존재하지 않는 것의 invert 라서 true가 됨.

    다만 이 경우는 한 줄로 만들기 위해 null이 false로 나오고 오브젝트는 true 여야 하므로, !! 두 개를 써서 invert의 invert를 한 것.

    join을 통해서 한 줄로 만든 것도 심플하고 좋았다.

     

    단순 sort를 쓰면, 내 코드는 첫 번째와 두 번째 배열이 숫자 정렬로 제대로 되지 않아서 구현을 따로 했었다.

    그런데 첫 번째 배열을 제곱해서 정렬을 하면 두 번째와 같은 정렬 로직을 사용하게 되므로 join으로 스트링 변환을 해도 동일한 배열이면 동일하게 나올거라 생각지 못한 부분이라 좋았다. 

    function comp(a, b) {
      return !!a && !!b && a.map(x => x*x).sort().join() == b.sort().join();
    }

    'Web > 자바스크립트' 카테고리의 다른 글

    새로운 객체 기능  (0) 2023.04.15
    Javascript 클래스  (0) 2023.03.04
    화살표 함수  (0) 2023.02.11
    let 과 const  (2) 2023.02.06
Designed by Tistory.