-
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