본문 바로가기
카테고리 없음

매내처(Manacher) 알고리즘을 활용한 팰린드롬 문자열 탐색의 효율화 전략

by tech-korea 2026. 5. 3.

매내처(Manacher) 알고리즘을 활용한 팰린드롬 문자열 탐색의 효율화 전략

문자열 처리 기술 분야에서 팰린드롬(Palindrome)은 앞뒤가 똑같은 단어나 문장을 의미하며, 이를 효율적으로 찾아내는 알고리즘은 정보 검색 및 유전체 분석(Genomic Analysis) 등 다양한 영역에서 핵심적인 역할을 수행합니다. 전통적으로 임의의 문자열 내에서 모든 부분 팰린드롬을 탐색하는 방식은 각 지점을 중심으로 확산하는 방식을 채택하였으나, 이는 최악의 경우 O(N^2)의 시간 복잡도를 가짐으로써 대규모 데이터 처리에 한계를 보였습니다. 이러한 계산 효율성 저하 문제를 해결하기 위해 고안된 것이 바로 매내처(Manacher) 알고리즘입니다. 이 알고리즘은 문자열의 대칭성을 극대화하여 활용함으로써 전체 탐색 시간을 선형 시간(Linear Time)으로 단축시키는 혁신적인 접근법을 제시합니다. 현대 IT 산업에서는 대용량 텍스트 로그 분석이나 바이오인포매틱스 분야의 서열 매칭 등에서 매내처 알고리즘의 최적화 원리를 응용하여 시스템의 처리 속도를 비약적으로 향상시키고 있습니다.

1. 매내처(Manacher) 알고리즘의 동작 메커니즘과 이론적 배경

매내처(Manacher) 알고리즘은 주어진 문자열 내의 모든 부분 팰린드롬의 반지름 길이를 기록하는 배열을 구성하며 작동합니다. 핵심 아이디어는 이전에 계산된 팰린드롬의 대칭성(Symmetry) 정보를 재사용하여 불필요한 비교 연산을 생략하는 것입니다. 알고리즘은 현재 탐색 중인 중심점(Center)과 그 중심점을 기준으로 형성된 팰린드롬의 오른쪽 끝 경계인 우측 경계(Right Boundary)를 유지 관리합니다. 새로운 지점에서의 팰린드롬 반경을 구할 때, 해당 지점이 현재 우측 경계 내부에 위치한다면 대칭 지점의 이미 계산된 값을 참조하여 초기 반지름 값을 설정할 수 있습니다. 이는 마치 "거울 앞에 서서 내 모습을 보듯, 이미 확인한 왼쪽 영역의 정보를 오른쪽 영역에 그대로 투영하는 방식"으로 작동하여 중복 계산을 방지합니다.

기술적으로 이 알고리즘이 선형 시간 복잡도인 $O(N)$을 보장하는 이유는 각 문자에 대한 비교가 우측 경계를 확장할 때만 발생하기 때문입니다. 이미 우측 경계 내부에 포함된 지점들은 대칭 성질을 통해 상수 시간 내에 반지름의 최솟값을 확보할 수 있습니다. 또한, 문자열의 길이가 홀수인 경우와 짝수인 경우를 통합하여 처리하기 위해 문자열의 각 문자 사이와 양 끝에 특수 기호(예: #)를 삽입하는 전처리(Preprocessing) 과정을 거칩니다. 이러한 변환을 통해 모든 잠재적 팰린드롬 중심점을 홀수 길이의 구조로 통일할 수 있으며, 복잡한 조건문 없이 일관된 로직 구현이 가능해집니다. 결과적으로 매내처 알고리즘은 공간 복잡도 $O(N)$을 유지하면서도 시간 효율성을 극대화한 알고리즘 설계의 정수로 평가받습니다.

2. 매내처(Manacher) 알고리즘의 구현 단계 및 최적화 기법

구현의 첫 번째 단계는 문자열 변환(String Transformation)입니다. 앞서 언급한 바와 같이 문자열 사이에 구분자(Delimiter)를 삽입하여 모든 부분 팰린드롬의 중심을 명확히 정의합니다. 예를 들어 "aba"는 "#a#b#a#"로 변환됩니다. 이후 각 인덱스에서의 팰린드롬 반지름을 저장할 배열 $L$을 초기화합니다. 반복문을 통해 문자열을 순회하며, 현재 인덱스 $i$가 이전 팰린드롬의 우측 경계 $R$보다 작다면, $L[i]$의 초기값을 $min(R-i, L[2C-i])$로 설정합니다. 여기서 $C$는 현재 활성화된 팰린드롬의 중심점이며, $2C-i$는 중심점 $C$를 기준으로 한 $i$의 대칭점 인덱스입니다. 이러한 초기화 이후에는 실제 문자가 일치하는지 확인하며 반지름을 확장해 나가는 '확장 단계(Expansion Phase)'를 수행합니다.

두 번째 단계는 중심점과 우측 경계의 갱신(Update)입니다. 확장이 완료된 후 $i + L[i]$ 값이 기존의 $R$보다 크다면, 중심점 $C$를 $i$로 이동시키고 $R$을 $i + L[i]$로 갱신합니다. 이 과정은 알고리즘이 문자열을 단 한 번만 훑고 지나가도록 보장합니다. 최적화 측면에서 중요한 점은 경계 조건 처리입니다. 배열의 범위를 벗어나는 인덱스 참조를 방지하기 위해 변환된 문자열의 시작과 끝에 서로 다른 특수 문자(예: ^, $)를 추가하는 기법이 자주 사용됩니다. 또한, 실제 문제 해결 시에는 반지름 배열 $L$의 최댓값을 찾아 원래 문자열에서의 시작 인덱스와 길이를 역산하는 과정이 수반됩니다. 이러한 정밀한 인덱스 제어는 알고리즘의 정확성을 결정짓는 요소이며, 비트마스킹(Bitmasking)과 같은 기법만큼이나 세밀한 데이터 핸들링 능력을 요구합니다.

3. 매내처(Manacher) 알고리즘의 성능 분석과 수식적 증명

매내처 알고리즘의 성능은 시간 복잡도 분석(Time Complexity Analysis)을 통해 명확히 드러납니다. 단순 탐색의 경우 중첩 반복문을 통해 각 위치에서 최대 $N/2$번의 비교를 수행하여 총 $O(N^2)$의 시간이 소요되지만, 매내처 알고리즘의 내부 비교 횟수의 총합은 문자열 길이 $N$에 비례합니다. 각 비교 단계에서 성공적인 일치가 발생할 때마다 우측 경계 $R$이 반드시 오른쪽으로 1칸 이상 이동하며, $R$은 최대 $2N+1$까지만 증가할 수 있기 때문입니다. 즉, 전체 루프가 실행되는 동안 '성공한 비교'의 횟수는 $O(N)$을 넘지 않으며, '실패한 비교'는 각 루프당 단 한 번만 발생하므로 총 연산 횟수는 선형적으로 제한됩니다.

수식적으로 표현하면, 현재 위치 $i$에서의 반지름 $L[i]$를 결정할 때 대칭성 정보를 이용하는 과정은 다음과 같은 조건부 대입으로 요약됩니다. $$L[i] = \begin{cases} \min(R - i, L[2C - i]) & \text{if } i < R \\ 0 & \text{if } i \ge R \end{cases}$$ 이후 $L[i]$를 기반으로 확장 연산을 수행하며 최종 반지름을 결정합니다. 공간 복잡도(Space Complexity) 역시 변환된 문자열과 반지름 배열을 유지하는 데 $O(N)$의 비용이 발생하여 매우 효율적입니다. 이러한 수학적 견고함 덕분에 매내처 알고리즘은 문자열 매칭 분야에서 최장 팰린드롬 부분 문자열(Longest Palindromic Substring) 문제를 해결하는 가장 표준적이고 강력한 도구로 자리 잡았습니다.

4. 아직은 실무를 많이 겪어보지 못했을 누군가에게..

다른 회사로 이직을 하려고 코딩 테스트를 준비하면서 문자열 문제를 풀다가 매내처 알고리즘을 처음 접했던 기억이 나네요. 당시에는 팰린드롬 문제를 단순히 양쪽으로 확장하는 방식으로만 풀었는데, 데이터 크기가 커지니까 여지없이 시간 초과(Time Out)가 뜨더군요. 제가 대칭성을 전혀 활용하지 못하고 중복 계산만 반복하고 있었던 거죠.

 

처음에 '#'을 넣어서 문자열을 변환하는 과정을 이해하는 게 조금 헷갈려서 고생 좀 했네요. 같이 코딩테스트 준비하던 구룹 멤버가  "이건 거울 효과를 이용하는 거야"라고 힌트를 주셔서 그때서야 이해되더라구요. 인덱스 계산 하나 잘못해서 새벽 내내 디버깅하며 식은땀을 흘렸던 기억을 떠올리면 아직도 소름이 돋아요. 역시 알고리즘은 눈으로만 보는 게 아니라 직접 구현하며 삽질을 해봐야 내 것이 된다는 걸 다시 한번 뼈저리게 느꼈답니다. 여러분도 처음에 수식이 복잡해 보인다고 포기하지 마시고, 눈으로 말고, 컴퓨터로 말고 꼭 스스로 직접 그림을 그려가며 인덱스를 따라가 보세요. 그래야 내것이 된답니다.

[오늘의 핵심 요약]
  • 매내처 알고리즘은 O(N)의 시간 복잡도로 모든 팰린드롬을 탐색합니다.
  • 전처리(Preprocessing)를 통해 홀수/짝수 길이 문제를 통합하여 해결합니다.
  • 이전 팰린드롬의 대칭성을 이용해 불필요한 비교를 획기적으로 줄입니다.
  • 실무 구현 시 배열의 경계 조건(Boundary Condition) 처리에 각별히 유의해야 합니다.

소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 tech-korea