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

JavaScript로 회문(Palindrome) 문자열 판별 함수 구현하기

이번 글에서는 문자열을 인자로 받아 해당 문자열이 회문(Palindrome)인지 판별하는 JavaScript 함수를 작성해 보겠습니다. 회문이란 앞에서 읽으나 뒤에서 읽으나 동일한 문자열을 의미합니다.

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

  • 'madam'
  • 'dad'
  • 'abcdcba'

이 문제의 핵심 조건은 내장 문자열 메서드를 사용하거나, split() 등으로 문자열을 배열로 변환하지 않고 해결해야 한다는 점입니다.

접근 방식: 두 포인터(Two Pointer) 기법

가장 효율적인 방법은 문자열의 양 끝에서 시작하여 중앙으로 이동하며 한 글자씩 비교하는 두 포인터 기법입니다. 왼쪽 포인터(start)와 오른쪽 포인터(end)를 두고, 각 위치의 문자가 일치하지 않으면 즉시 false를 반환합니다. 모든 비교를 통과하면 true를 반환합니다.

구현 예제 코드

const str = 'madam';
const isPalindrome = (str = '') => {
    const { length } = str;
    let start = 0, end = length - 1;
    while(start < end){
        const leftChar = str[start];
        const rightChar = str[end];
        if(leftChar !== rightChar){
            return false;
        };
        start++;
        end--;
    };
    return true;
};
console.log(isPalindrome(str));
console.log(isPalindrome('avsssvsa'));

실행 결과

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

true
false

코드 설명

'madam'은 뒤집어도 'madam' 그대로이므로 true가 출력되고, 'avsssvsa'는 앞뒤 대칭이 아니므로 false가 출력됩니다. 이 알고리즘은 문자열 길이의 절반만큼만 순회하므로 시간 복잡도가 O(n/2), 즉 O(n)이며, 추가 배열 생성 없이 원본 문자열에서 직접 인덱스로 접근하기 때문에 메모리 측면에서도 매우 효율적입니다. 내장 메서드나 배열 변환 없이 순수하게 인덱스 비교만으로 문제를 해결할 수 있는 실용적인 예제입니다.