Arian Soleimanzadeh
  • 홈
  • 블로그
  • 팟캐스트
  • 비디오
  • 라이브러리
  • 문의
العربيةArabic
DeutschGerman
EnglishEnglish
فارسیPersian
한국어Korean
中文Chinese
패널•빠른 문의

Languages

Choose your interface locale

ar

العربية

Arabic

de

Deutsch

German

en

English

English

fa

فارسی

Persian

ko

한국어

Korean

zh

中文

Chinese

상담 예약

짧은 메시지를 남겨주세요 — 가능한 한 빠르게 답변드리겠습니다.

LinkedIn빠른 응답
홈/아티클/Palindrome이란? Two Pointers와 TypeScript로 팰린드롬 검사하기
Algorithms아티클

Palindrome이란? Two Pointers와 TypeScript로 팰린드롬 검사하기

Palindrome은 앞에서 읽어도 뒤에서 읽어도 같은 문자열이나 숫자입니다. Two Pointers를 이용한 O(n) 검사 방법과 TypeScript 구현, 정규화 및 면접 패턴을 설명합니다.

2026년 8월 19일6 분 읽기17 조회수
#Algorithms#Palindrome#Two Pointers#String Algorithms#TypeScript

Arian Soleimanzadeh

Software Engineer & Researcher

문자열 양 끝에서 중앙으로 이동하는 Two Pointers 기반 Palindrome 검사 시각화

Arian Soleimanzadeh

AI · 코드 · 제품

연구 + 엔지니어링
이 페이지에서
문자열을 뒤집는 방법Two Pointers 방법공백과 특수문자 무시하기숫자 PalindromeRecursionAlmost Palindrome관련 알고리즘 문제Two Pointers의 중요성대소문자기술 면접 문제Edge Cases정리

Palindrome은 앞에서 읽든 뒤에서 읽든 동일한 문자열, 숫자 또는 시퀀스를 의미합니다.

예:

Code
1234
racecar
level
madam
1221

반면:

Code
123
hello
algorithm
1234

는 Palindrome이 아닙니다.

이 문제는 Two Pointers를 배우기에 매우 좋은 기본 문자열 문제입니다.

문자열을 뒤집는 방법

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

TypeScript
123
function isPalindrome(value: string): boolean {
  return value === value.split("").reverse().join("");
}

복잡도는:

Code
12
Time: O(n)
Space: O(n)

입니다.

Two Pointers 방법

더 효율적인 방법은 양 끝에 Pointer를 두는 것입니다.

Code
123
r a c e c a r
↑           ↑
L           R

두 문자가 같으면 가운데 방향으로 이동합니다.

TypeScript
123456789101112131415
function isPalindrome(value: string): boolean {
  let left = 0;
  let right = value.length - 1;

  while (left < right) {
    if (value[left] !== value[right]) {
      return false;
    }

    left++;
    right--;
  }

  return true;
}

복잡도:

Code
12
Time: O(n)
Space: O(1)

공백과 특수문자 무시하기

대표적인 예:

Code
1
A man, a plan, a canal: Panama

소문자로 바꾸고 문자가 아닌 항목을 제거하면:

Code
1
amanaplanacanalpanama

가 되어 Palindrome임을 확인할 수 있습니다.

추가 문자열을 만들지 않고 Pointer가 이동하면서 특수문자를 Skip할 수도 있습니다.

숫자 Palindrome

Code
123
121
1221
4554

같은 숫자도 Palindrome입니다.

숫자를 String으로 변환하거나 수학적으로 자리수를 뒤집어 검사할 수 있습니다.

TypeScript
1234567891011121314
function isNumberPalindrome(value: number): boolean {
  if (value < 0) return false;

  const original = value;
  let reversed = 0;

  while (value > 0) {
    const digit = value % 10;
    reversed = reversed * 10 + digit;
    value = Math.floor(value / 10);
  }

  return original === reversed;
}

Recursion

양 끝 문자를 비교하고 내부 범위를 Recursive하게 검사할 수도 있습니다.

시간은 O(n)이지만 Call Stack 때문에 추가 공간은 O(n) 정도가 필요합니다.

따라서 일반적으로 반복문을 이용한 Two Pointers가 더 효율적입니다.

Almost Palindrome

자주 나오는 확장 문제는 다음과 같습니다.

최대 한 문자를 삭제하여 Palindrome을 만들 수 있는가?

첫 mismatch에서 왼쪽 문자 또는 오른쪽 문자를 하나 Skip한 뒤 남은 범위가 Palindrome인지 검사할 수 있습니다.

관련 알고리즘 문제

Palindrome 개념은 다음 문제의 기반이 됩니다.

  • Longest Palindromic Substring
  • Palindromic Subsequence
  • Palindrome Partitioning
  • Minimum Insertions
  • Valid Palindrome

Two Pointers의 중요성

Two Pointers는 다음 문제에서도 자주 사용됩니다.

  • Pair Sum
  • Remove Duplicates
  • Partitioning
  • Array Merge
  • Container With Most Water

따라서 Palindrome은 이 패턴을 익히는 좋은 시작점입니다.

대소문자

Level이 Palindrome인지 여부는 규칙에 따라 다릅니다.

Case-sensitive 비교에서는 L과 l이 다르지만 lowercase로 정규화하면 level이 됩니다.

기술 면접 문제

흔한 문제는 공백, 특수문자, 대소문자를 무시하고 Palindrome인지 검사하는 것입니다.

좋은 해결 방식은:

Code
123
Two Pointers
Skip invalid characters
Case-insensitive comparison

이며:

Code
12
Time: O(n)
Space: O(1)

을 달성할 수 있습니다.

Edge Cases

Code
12345
""        → true
"a"       → true
"aa"      → true
"ab"      → false
"racecar" → true

정리

Palindrome은 양방향에서 동일하게 읽히는 시퀀스입니다.

표준 알고리즘은 Two Pointers이며:

Code
12
Time Complexity: O(n)
Space Complexity: O(1)

입니다.

이 문제는 단순하지만 대칭 비교, Two Pointers, 문자열 정규화, Edge Case 처리와 같은 중요한 알고리즘 사고방식을 익히는 데 매우 유용합니다.

이 페이지에서
문자열을 뒤집는 방법Two Pointers 방법공백과 특수문자 무시하기숫자 PalindromeRecursionAlmost Palindrome관련 알고리즘 문제Two Pointers의 중요성대소문자기술 면접 문제Edge Cases정리

아티클 정보

게시 정보, 읽기 시간 및 조회 데이터입니다.

게시일

2026년 8월 19일

업데이트

2026년 11월 7일

읽기 시간

6 분 읽기

조회수

17

작성자

Arian Soleimanzadeh

이전 아티클

Longest Common Substring이란? Dynamic Programming으로 가장 긴 공통 부분 문자열 찾기

다음 아티클

Regular Expression Matching이란? Dynamic Programming과 TypeScript로 Regex 이해하기

Arian Soleimanzadeh

현대적인 웹 엔지니어링, UI 시스템, 실용적인 AI 제품에 집중한 개인 포트폴리오 — 깨끗한 코드, 명확한 디자인.

빠른 링크

  • 소개
  • 블로그
  • 라이브러리
  • 문의

문의

  • soleimanzadeh.a.work@gmail.com
  • soleimanzadeh.uni@gmail.com

가능 시간: 평일

보통 다음 시간 내에 답변합니다 24시간.

뉴스레터

글, 프로젝트, 새 릴리스에 대한 업데이트를 받아보세요.

© 2026 ariansoleimanzadeh.dev — 모든 권리 보유.

LinkedIn