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

자바스크립트로 회문(Palindrome) 배열 확인하는 방법

회문 배열이란?

배열의 요소를 앞에서 읽으나 뒤에서 읽으나 순서가 동일한 배열을 회문(palindrome) 배열이라고 합니다. 이 글에서는 리터럴 값으로 이루어진 배열을 입력받아 해당 배열이 회문 배열인지 판별하는 자바스크립트 함수를 작성해 보겠습니다.

대표적인 회문 배열의 예는 다음과 같습니다.

const arr1 = ['a', 'b', 'c', 'b', 'a'];
const arr2 = [4, 7, 7, 4];
const arr3 = [7, 7, 7, 7, 7, 7];

arr1은 어느 방향에서 읽어도 'a', 'b', 'c', 'b', 'a' 순서가 그대로이며, arr2와 arr3 역시 뒤집어도 원래 배열과 완전히 동일합니다.

구현 아이디어

가장 효율적인 방법은 배열의 양쪽 끝에서부터 중앙을 향해 두 요소를 짝지어 비교하는 것입니다. 중간 지점까지만 확인하면 되기 때문에 배열 전체를 뒤집거나 새로운 배열을 만들 필요 없이 선형 시간(O(n)) 내에 검사를 마칠 수 있습니다.

예제 코드

const arr = [1, 5, 7, 4, 15, 4, 7, 5, 1];

const isPalindrome = arr => {
  const { length: l } = arr;
  const mid = Math.floor(l / 2);
  for (let i = 0; i <= mid; i++) {
    if (arr[i] !== arr[l - i - 1]) {
      return false;
    }
  }
  return true;
};

console.log(isPalindrome(arr));

코드 설명

  • arr.length를 구조 분해 할당으로 가져와 변수 l에 저장합니다.
  • Math.floor(l / 2)로 배열의 중간 인덱스를 계산합니다.
  • 반복문을 돌며 앞쪽의 i번째 요소와 뒤쪽의 i번째 요소(arr[l - i - 1])를 비교합니다.
  • 하나라도 다르면 즉시 false를 반환하고, 모든 짝이 일치하면 true를 반환합니다.

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

true

예제의 배열 [1, 5, 7, 4, 15, 4, 7, 5, 1]은 앞에서 읽든 뒤에서 읽든 순서가 동일하므로 회문 배열로 판별됩니다. 이처럼 투 포인터 방식의 비교만으로도 추가 메모리 없이 간단하고 빠르게 회문 배열 여부를 확인할 수 있습니다.