일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 알고리즘
- 페이스북 번역
- Push
- 웹사이트최적화기법
- ddd
- 성능
- kafka
- gcm 푸시 번역
- Design Pattern
- notification
- 푸시 번역
- JPA
- 자바스크립트
- nginx설정
- Java
- 웹사이트 성능
- GCM 번역
- php
- git
- nginx설치
- APNS
- graphql
- nginx
- GCM
- 카프카
- 푸시
- 디자인패턴
- 웹사이트성능
- 카프카 트랜잭션
Archives
- Today
- Total
간단한 개발관련 내용
[알고리즘][문자열] 팰린드롬(Palindrome) 본문
Computer Science/Algorithm & Etcs...
[알고리즘][문자열] 팰린드롬(Palindrome)
vincenzo.dev.82 2025. 6. 19. 14:48반응형
✅ 팰린드롬(Palindrome) 정리
1. 정의
팰린드롬이란 앞에서 읽으나 뒤에서 읽으나 같은 문자열을 말한다.
문자, 숫자, 문장 모두 해당할 수 있으며, 보통 공백·기호·대소문자를 무시한다.
예시:
- "madam" → ✅
- "racecar" → ✅
- "A man, a plan, a canal, Panama" → ✅ (전처리 후)
- "hello" → ❌
2. 조건
팰린드롬이 되기 위한 조건:
- 좌우가 대칭이어야 함
- 대소문자 구분 없이 비교
- 특수문자, 공백 무시 가능
3. 주요 활용 사례
- 문자열 유효성 검사
- 자연어 처리 / 텍스트 마이닝
- 회문 관련 알고리즘 (최장 회문 부분 문자열 등)
- 인터뷰/프로그래밍 대회
4. 구현
✅ Java: 투 포인터 방식
public boolean isPalindrome(String str) {
str = str.replaceAll("[^a-zA-Z0-9]", "").toLowerCase(); // 전처리
int left = 0, right = str.length() - 1;
while (left < right) {
if (str.charAt(left++) != str.charAt(right--)) {
return false;
}
}
return true;
}
✅ C 언어 구현
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void cleanString(const char* src, char* dest) {
int j = 0;
for (int i = 0; src[i]; i++) {
if (isalnum(src[i])) {
dest[j++] = tolower(src[i]);
}
}
dest[j] = '\0';
}
int isPalindrome(const char* str) {
char cleaned[1000];
cleanString(str, cleaned);
int left = 0, right = strlen(cleaned) - 1;
while (left < right) {
if (cleaned[left++] != cleaned[right--]) return 0;
}
return 1;
}
✅ Python 구현
def is_palindrome(s: str) -> bool:
# 전처리: 알파벳/숫자만 남기고 소문자로 변환
s = ''.join(c.lower() for c in s if c.isalnum())
# 투포인터로 비교
left, right = 0, len(s) - 1
while left < right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return True
# 테스트
print(is_palindrome("A man, a plan, a canal, Panama")) # True
print(is_palindrome("hello")) # False
5. 팁 & 주의사항
항목 설명
전처리 정규식 | Java: replaceAll("[^a-zA-Z0-9]", "")Python: isalnum() 사용 |
대소문자 무시 | Java: toLowerCase() C: tolower() Python: .lower() |
문자열 비교 | 투 포인터 방식이 일반적이며 가장 효율적 |
Unicode 주의 | 한글 포함 시 정규화(NFC/NFD) 고려 필요 (Python unicodedata) |
반응형