Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 두 숫자 배열의 동일 여부 확인하기

문제 개요

두 개의 숫자 배열(예: firstsecond)을 인수로 받아 두 배열이 동일한지 판별하는 JavaScript 함수를 작성해야 합니다.

이때 다음 조건 중 하나라도 만족하면 두 배열은 동일한 것으로 간주됩니다.

  • 두 배열이 같은 요소를 같은 순서로 포함하는 경우
  • 첫 번째 배열의 모든 요소의 곱과 두 번째 배열의 모든 요소의 곱이 서로 같은 경우

예시 입력

첫 번째 숫자 배열은 다음과 같습니다.

const first = [3, 5, 6, 7, 7];

두 번째 숫자 배열은 다음과 같습니다.

const second = [7, 5, 3, 7, 6];

위 두 배열은 요소의 나열 순서는 다르지만, 각 배열 요소를 모두 곱하면 3 × 5 × 6 × 7 × 7 = 4410으로 양쪽 모두 동일합니다. 따라서 이 두 배열은 동일한 배열로 판단되어야 합니다.

코드 구현

다음은 위 조건을 구현한 전체 코드입니다.

const first = [3, 5, 6, 7, 7];
const second = [7, 5, 3, 7, 6];

const isEqual = (first, second) => {
   // 각 배열의 모든 요소를 곱한 값 계산
   const prodFirst = first.reduce((acc, val) => acc * val);
   const prodSecond = second.reduce((acc, val) => acc * val);

   // 곱이 같으면 동일한 배열로 판단
   if (prodFirst === prodSecond) {
      return true;
   }

   // 곱이 다르면 요소와 순서가 완전히 일치하는지 확인
   for (let i = 0; i < first.length; i++) {
      if (first[i] === second[i]) {
         continue;
      }
      return false;
   }
   return true;
};

console.log(isEqual(first, second));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

true

동작 원리 설명

이 함수의 핵심 로직은 크게 두 단계로 나눌 수 있습니다.

1단계: 전체 곱 비교

reduce() 메서드를 사용해 각 배열의 모든 요소를 누적 곱셈하여 하나의 값으로 만듭니다. 두 곱이 같다면 요소의 순서와 관계없이 즉시 true를 반환합니다. 예제에서는 두 배열의 곱이 모두 4410이므로 이 단계에서 true가 반환됩니다.

2단계: 요소별 순차 비교

곱이 다른 경우에는 반복문을 통해 첫 번째 배열과 두 번째 배열의 요소를 인덱스별로 하나씩 비교합니다. 중간에 하나라도 값이 다른 요소가 발견되면 즉시 false를 반환하고, 끝까지 모든 요소가 일치한다면 true를 반환합니다.

참고 사항

곱 기반 비교 방식은 간결하지만, 배열에 0이 포함된 경우 서로 다른 배열이라도 곱이 0으로 같아질 수 있다는 점에 유의해야 합니다. 실무에서는 요소 개수와 정렬 후의 배열을 비교하는 방식 등을 함께 고려하는 것이 더 안전합니다.