https://leetcode.com/problems/valid-palindrome/

 

문제

함수에 입력한 단어가 팬린드롬인지 확인하는 함수를 작성하여라

 

거꾸로 해도 똑같은 영어단어 - palindrome(회문)

'회문 영어단어'에 대해 알아보았다. 여기서 '회문(回文)'은 거꾸로 읽어도, 제대로 읽어도, 앞뒤 어느 쪽에서 읽어도, 똑같은 말이 되는 단어나 구문을 뜻하며, 영어로는 'palindrome[팰린드롬]'이라고 한다. 영어 회문 중에서 쉽고 친숙한 단어는 붉은색으로 따로 구분해서 표시했다.

 

 


풀이 및 해석(주석)

#1. 리스트를 활용한 방법

def func(s):
    s = s.lower()             # 일단 소문자화
    alnum = []                # 새로운 리스트를 만들어 준다.
    for i in s:               # 받은 문자열을 순회해준다. 이때 공백도 포함이 된다
        if i.isalnum():       # 문자열이 알파벳이거나 숫자인경우에
            alnum.append(i)   # 새로만든 리스트에 저장
    if alnum == alnum[::-1]:  # 리스트가 거꾸로해도 똑같은 경우
        return True
    else:
        return False



print(func('a@b :b a')) # True
print(func('won'))      # False
print(func('A man, a plan, a canal: Panama')) # True

 

2. re 모듈을 활용한 방법

import re                 #re 모듈을 불러온다.

def func(s) -> bool:      # 함수를 bool타입으로 설정
    s = s.lower()             # 일단 소문자화 시켜준다.
    s = re.sub('[^0-9a-z]', '', s) 
    # re.sub('[]')에서 [^a-z]등으로 설정하면 ^다음에 입력한 값들 이 아닌건 ''으로 없애준다.
    # 앞에 ^를 안해주면 a-z 즉, 알파벳을 ''으로 없애주는 기능이 적용된다.
    return s == s[::-1]   #거꾸로 해서 일치하는지를 리턴

print(func('a@b :b a')) # True
print(func('won'))      # False
print(func('A man, a plan, a canal: Panama')) # True
복사했습니다!