Programing/Algorithm

JavaScript로 검사하는 회문 문자열 (Palindrome Check)

2025. 5. 23. 08:56
반응형

회문이란 무엇인가?

회문(Palindrome)은 앞으로 읽으나 뒤로 읽으나 동일한 문장이나 단어를 의미합니다. 예를 들어 'racecar', 'level', 'noon' 같은 단어는 회문의 대표적인 예시입니다. 회문 검사는 문자열 처리 능력과 기본적인 알고리즘 문제 해결 능력을 연습하기에 좋은 주제입니다.

자바스크립트에서 회문을 판별하는 여러 가지 방법과 각각의 장단점, 사용 상황을 살펴보겠습니다.


방법 1: 문자열을 뒤집어 비교하는 방식

가장 간단한 방법은 문자열을 뒤집어서 원본 문자열과 비교하는 것입니다.

function isPalindrome(str) {
  const normalizedStr = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
  return normalizedStr === normalizedStr.split('').reverse().join('');
}

console.log(isPalindrome('racecar'));   // true
console.log(isPalindrome('hello'));     // false
console.log(isPalindrome('A man, a plan, a canal: Panama')); // true

동작 흐름

  • 원본 문자열에서 특수 문자와 공백을 제거하고 모두 소문자로 정규화합니다.
  • 문자열을 뒤집은 결과와 원본 문자열이 같다면 회문입니다.

장점: 직관적이고 구현이 간단합니다.

단점: 문자열을 뒤집을 때 추가적인 메모리를 사용합니다. 시간 복잡도는 O(n)입니다.


방법 2: 반복문으로 양 끝 문자 비교

이 방식은 문자열을 양 끝에서부터 중간 지점까지 서로 비교하며 검사합니다.

function isPalindromeLoop(str) {
  const normalizedStr = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
  let left = 0;
  let right = normalizedStr.length - 1;

  while (left < right) {
    if (normalizedStr[left] !== normalizedStr[right]) return false;
    left++;
    right--;
  }
  return true;
}

console.log(isPalindromeLoop('racecar'));   // true
console.log(isPalindromeLoop('world'));     // false

동작 흐름

  • 정규화된 문자열의 첫 번째 문자와 마지막 문자를 비교합니다.
  • 같지 않다면 바로 false를 반환하고, 같다면 범위를 점차 좁혀 중간까지 계속 비교합니다.

장점: 추가적인 메모리를 거의 사용하지 않아 효율적입니다.

단점: 코드가 조금 더 길어질 수 있습니다. 시간 복잡도는 O(n)입니다.

 


방법 3: 정규식을 활용한 방식

정규식으로 불필요한 문자를 제거하고, 문자열을 뒤집어 비교합니다.

function isPalindromeRegex(str) {
  const normalizedStr = str.toLowerCase().match(/[a-z0-9]/g).join('');
  return normalizedStr === [...normalizedStr].reverse().join('');
}

console.log(isPalindromeRegex('RaceCar')); // true
console.log(isPalindromeRegex('OpenAI'));  // false

동작 흐름

  • 정규식을 이용해 알파벳과 숫자만 추출하여 정규화합니다.
  • 배열 스프레드([...])를 사용하여 문자열을 뒤집습니다.
  • 원본 문자열과 비교하여 결과를 반환합니다.

장점: 코드가 간결하고 명확합니다.

단점: 정규식을 처리하는 데 약간의 오버헤드가 발생할 수 있습니다.


각 방식의 비교 정리

방식  시간 복잡도  메모리 사용  장점  단점
뒤집어 비교 O(n) 높음 간단하고 직관적 추가 메모리 사용
반복문 양 끝 비교 O(n) 낮음 효율적인 메모리 관리 코드 길이 증가
정규식 활용 O(n) 보통 코드가 간결하고 읽기 쉬움 정규식의 약간의 오버헤드

일반적으로 작은 문자열에서는 간단한 뒤집어 비교 방식도 괜찮지만, 성능과 효율이 중요한 환경에서는 반복문 양 끝 비교 방식을 추천합니다.


마무리 및 추천 자료

회문 검사는 문자열 처리, 반복문 구조, 정규식 활용 등의 기본기를 종합적으로 익힐 수 있는 훌륭한 연습 문제입니다. 이러한 문제를 여러 방식으로 구현하고 성능 차이를 비교하는 경험은 알고리즘 문제 해결 능력을 키우는 데 큰 도움이 됩니다.

다음 무료 리소스를 통해 알고리즘 문제 풀이 능력을 강화할 수 있습니다:

  • 프로그래머스 JavaScript 기초 강의
  • LeetCode Palindrome 문제 연습
  • replit JavaScript 실습 환경

꾸준히 문제를 해결하고 다양한 방법을 탐구하면 개발자로서의 실력을 더욱 탄탄하게 다질 수 있습니다.

반응형

'Programing > Algorithm' 카테고리의 다른 글

JavaScript로 이해하는 최적 경로 탐색 (최소 비용 경로, 다익스트라 알고리즘)  (1) 2025.06.03
JavaScript로 구현하는 피보나치 수열 (Fibonacci Sequence)  (1) 2025.06.03
JavaScript로 구현하는 소수 판별 (Prime Check)  (0) 2025.05.26
JavaScript로 구하는 최대공약수와 최소공배수 (GCD / LCM)  (0) 2025.05.26
JavaScript로 푸는 아나그램 판별 (Anagram Detection)  (0) 2025.05.23
JavaScript로 배우는 문자열 뒤집기 (String Reverse)  (0) 2025.05.23
피보나치 수열의 이해와 자바스크립트 구현  (0) 2025.05.22
JavaScript로 이해하는 하노이의 탑 (Tower of Hanoi)  (0) 2025.05.22
'Programing/Algorithm' 카테고리의 다른 글
  • JavaScript로 구현하는 소수 판별 (Prime Check)
  • JavaScript로 구하는 최대공약수와 최소공배수 (GCD / LCM)
  • JavaScript로 푸는 아나그램 판별 (Anagram Detection)
  • JavaScript로 배우는 문자열 뒤집기 (String Reverse)
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (466) N
      • 금융 (61)
      • Programing (286) N
        • Algorithm (39)
        • API (2)
        • javascript (121)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (17)
        • MS-SQL (1)
        • MySQL (12)
        • 보안 (2) N
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (33) N
        • 회고 (3)
        • 컬럼 (1) N
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    블로그
    자바스크립트
    자바스크립트유틸
    php
    iT's MY LiFE
    IT블로그
    읽고 싶은 책
    Java
    위시리스트
    It
    js패턴
    기초
    디자인패턴
    SQL
    IT·컴퓨터
    사고 싶은 책
    jsp
    자바
    JavaScript
    IT 관련
Dongkkase
JavaScript로 검사하는 회문 문자열 (Palindrome Check)
상단으로

티스토리툴바