안녕하세요.
이번 시리즈에서는 Codewars의 도전 과제와 저의 사고 과정을 포스팅하고 있습니다. 가능할 때마다 JS와 Node 18을 사용하고 있습니다. 명확성을 위해 공정하게 사용하고 있습니다.
문제는 짝수로 가득 찬 배열에서 홀수 또는 홀수로 가득 찬 배열에서 짝수 중 하나를 찾아야 한다는 것입니다. 즉,
[0, 2, 4, 6, 8, 97, 14, 14, -2] -> 97
[ 1, 3, 2, -3, -7, 227, -183 ] -> 2
먼저 배열의 처음 3개 요소를 살펴보고 어떤 종류의 이상값이 있는지 확인하겠습니다.
나중에 우리가 해야 할 일은 모듈로 2가 다른 하나의 숫자에 도달할 때까지 배열을 순회하는 것입니다. 해당 알고리즘의 두 가지 변형이 그에 따라 적용됩니다.
// odd number in even array while (number % 2 == 0 && counter < integers.length){ number = integers[counter]; counter++; } // even number in odd array while (number % 2 == 1 && counter < integers.length){ number = integers[counter]; counter++; }
부품을 함께 조립하면 다음과 같이 됩니다.
function findOutlier(integers){ let counter = 0; let number = 0; let a = integers[0] % 2; let b = integers[1] % 2; let c = integers[2] % 2; if (a + b + c <= 1){ number = integers[0]; while (number % 2 == 0 && counter < integers.length){ number = integers[counter]; counter++; } } else { number = integers[0]; while (number % 2 == 1 && counter < integers.length){ number = integers[counter]; counter++; } } return number; }
테스트를 통과하지 못했을 때 제가 느낀 감정은 바로 이것이었습니다.
둘째, 무슨 일이 일어났는지 구글링해야 했어요. 나는 음수가 나타날 수 있다고 생각하지 않은 것으로 나타났습니다. 그래서 JS가 음수 모듈러스를 어떻게 처리하는지 읽어야 했습니다
세 번째 단계에서는 Math.abs()를 사용하세요.
function findOutlier(integers){ let counter = 0; let number = 0; let a = Math.abs(integers[0] % 2); let b = Math.abs(integers[1] % 2); let c = Math.abs(integers[2] % 2); if (a + b + c <= 1){ number = integers[0]; while (Math.abs(number) % 2 == 0 && counter < integers.length){ number = integers[counter]; counter++; } } else { number = integers[0]; while (Math.abs(number) % 2 == 1 && counter < integers.length){ number = integers[counter]; counter++; } } return number; }
괜찮은 성능이지만 가독성이 좋지는 않습니다. 개선의 여지가 충분합니다.
조심하세요. 물을 마셔요???.
이전
위 내용은 Codewars - 패리티 이상치 찾기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!