728x90
# p.138 유효한 팰린드롬
# 리스트로 풀이
def is_palindrom(s: str) -> bool: #변수 s는 str의 자료형, is_palindrom의 반환값은 bool의 자료형
    strs = [] #strs 라는 리스트 선언
    for char in s: #s의 각 원소 하나씩 탐색
        if char.isalnum(): #그 원소가 알파벳인지 숫자인지 판별하는 함수
            strs.append(char.lower()) #조건문이 참이면, strs에 소문자로 삽입
    while strs: # strs가 빌때까지
        if strs.pop(0) != strs.pop(): #맨 처음 인덱스의 원소와, 맨 나중의 원소가 다르면
            return False #False 반환 후 종료

    return True # while 조건문에 걸러진게 없으면 True

# p.138 유효한 팰린드롬
# 데크 자료형 이용
def is_Palindrom(user_input: str) -> bool: #변수 s는 str의 자료형, is_palindrom의 반환값은 bool의 자료형
    strs: deque = deque() # strs변수를 deque 자료형으로 선언

    for char in user_input: #s의 각 원소 하나씩 탐색
        if char.isalnum(): #그 원소가 알파벳인지 숫자인지 판별하는 함수
            strs.append(char.lower()) #조건문이 참이면, strs에 소문자로 삽입
    while strs:
        if strs.popleft() != strs.pop():
            return False
    return True

# p.138 유효한 팰린드롬
# Python 답게! <정규식과, 슬라이싱>
def is_palin(user_input: str) -> bool:
    user_input = user_input.lower()

    user_input = re.sub('[^a-z0-9]', '', user_input) #정규식에 맞추어 필터링

    return user_input == user_input[::-1] #입력값과 입력값(슬라이싱) 비교하여 그 비교값 리턴

print(is_palin("IS THAT TRUE?"))
728x90
복사했습니다!