Valid Palindrome

문자열 조작의 기본 문제


문제 이해

오늘부터 알고리즘 공부를 시작해보려고 한다.
먼저 문자열 조작 문제 중 가장 기본적인 문제인 팰린드롬 문제를 풀어보자.

125. Valid Palindrome - 문제 링크

문제를 해석해 보면 아래와 같다.

대문자를 모두 소문자로 바꾸고 alphanumeric이 아닌 문자를 제거한 상태에서 앞으로 읽었을 때와 뒤로 읽었을 때가 같을 때 해당 문장을 palindrome이라고 한다.

alphanumeric이란 알파벳과 숫자를 의미한다.

문자열 s가 주어졌을 때 palindrome일 때 true, 아닐 때 false를 반환해라.


문제 풀이

문제를 해결하기 위한 과정을 아래와 같이 나눌 수 있다.

1. Alphanumeric 문자가 아닌 문자 제거

문자열 s에는 출력할 수 있는 아스키 문자가 들어온다고 되어있으므로 알파벳과 숫자가 아닌 문자를 제거해야 한다.

2. 대문자를 소문자로 변환

알파벳에는 대문자가 포함되어 있으므로 대문자를 소문자로 변환해야 한다.

3. 팰린드롬 확인

이제 AlphanumericLowercase의 조건이 만족되었으므로 팰린드롬인지 확인한다.


코드 구현

valid-palindrome.py
class Solution:
    def isPalindrome(self, s: str) -> bool:
        # 알파벳과 숫자만 추출
        s_only_alnum = "".join(filter(lambda c: c.isalnum(), s))
 
        # 모든 알파벳을 소문자로 변경
        s_only_alnum_lower = s_only_alnum.lower()
 
        # 뒤집었을 때 같은지 확인
        return s_only_alnum_lower == s_only_alnum_lower[::-1]

먼저, s 문자열에서 filter 함수와 str.alnum 메소드를 사용하여 알파벳과 숫자만 추출한다.

그리고 str.lower 메소드를 사용하여 모든 알파벳을 소문자로 변경한다.

마지막으로 문자열 슬라이싱을 사용하여 문자열을 뒤집어 원래 문자열과 비교한다. 같으면 true, 다르면 false를 반환한다.


마무리

이번 문제는 문자열 조작 문제 중 가장 기본적인 문제였다.

참고&공부 자료