[알고리즘] Deque을 이용한 회문(palindrome) 작성

문제

덱을 이용하여 주어진 문자열이 회문인지 아닌지를 결정하는 프로그램을 작성하라. (python)

소스코드

import re

# 덱 구현
class Deque:
    def __init__(self): self.items = []

    def isEmpty(self): return self.items == []

    def addFront(self, item): self.items.append(item)

    def addRear(self, item): self.items.insert(0, item)

    def deleteFront(self): return self.items.pop()

    def deleteRear(self): return self.items.pop(0)

    def size(self): return len(self.items)


# 특수문자, 공백 제거, 소문자처리
def preprocessing(str):
    result = re.sub('[^0-9a-zA-Zㄱ-힗]', '', str)
    result = result.lower()
    return result


# 회문검사
def palindrome(word):
    word = preprocessing(word)
    dq = Deque()

    for letter in word:
        dq.addRear(letter)

    while dq.size() > 1 and True:
        first = dq.deleteFront()
        last = dq.deleteRear()
        if first != last:
            return False

    return True


ex1 = "radar"
ex2 = "madam, I'm Adam"
ex3 = "abc"

print(ex1, "에 대한 회문 여부 : ", palindrome(ex1))
print(ex2, "에 대한 회문 여부 : ", palindrome(ex2))
print(ex3, "에 대한 회문 여부 : ", palindrome(ex3))


실행 결과

result

카테고리:

업데이트: