파이썬/알고리즘 이론

[알고리즘] 팰린드롬

유자차H 2022. 3. 24. 22:22
반응형

팰린드롬이란

문자와 숫자로 이루어진 문자열이며, 뒤집어도 똑같은 문자열

예로 이효리와 같이 뒤집어도 이(리)효리로 같은 문자열을 말한다.

 

팰린드롬인지 확인하는 방법으로 3가지를 만들었습니다.

맨 마지막 방법이 속도면에서 가장 빠른 방법입니다.

 

첫번째 방법은

isalnum()으로 문자열에서 문자와 숫자를 제외한 특수문자 같은 것을 걸러줍니다.

다음, pop()을 사용하여, 앞뒤로 문자를 뽑아주며 팰린드롬인지 확인합니다.

def isPalindrome(s):
    strs=[]
    for char in s:
        if char.isalnum(): 
            strs.append(char)

    # 팰린드롬 여부 판단
    while len(strs) > 1:
        if strs.pop(0) != strs.pop():
            return False
    return True

 

두번째 방법은

첫번째 방법과 같이 isalnum()을 사용 후

pop(0)이 O(n)으로 비효율적이기 때문에 deque를 사용하여, 같은 기능이지만 O(1)인 popleft()를 사용

from collections import deque
def isPalindrome(s):
    strs=deque([])
    for char in s:
        if char.isalnum(): 
            strs.append(char)

    # 팰린드롬 여부 판단
    while len(strs) > 1:
        if strs.popleft() != strs.pop(): # pop(0)은 O(n), popleft()은  O(1)으로 성능향상
            return False
    return True

 

세번째 방법은

정규식을 사용하여 문자와 숫자를 제외한 것 걸러준 후

슬라이싱을 통하여 뒤집어서 원래 문자열과 같은지 확인

import re
def isPalindrome(s):
    s = s.lower()
    s = re.sub("[^a-z0-9]","",s) # 문자와 숫자가 아닌 것은 지우기(""로 대체)
    
    # 팰린드롬 여부 판단
    return s == s[::-1] # 문자열 슬라이싱으로 뒤집기
반응형