상세 컨텐츠

본문 제목

리트코드 125. 유효한 팰린드롬 (파이썬)

알고리즘/문자열 조작

by NayC 2021. 9. 2. 19:57

본문

728x90

주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.

 

Example 1:Input: s = "A man, a plan, a canal: Panama" Output: true Explanation: "amanaplanacanalpanama" is a palindrome.

 

Example 2:

Input: s = "race a car" Output: false Explanation: "raceacar" is not a palindrome.


2차

1. 데이터 클렌징해서(영문자, 숫자, 소문자) 쭉 한 줄로 만들기. a라고 하자.

2. 비교 대상(반대부터 적혀진거)을  b = str[-1::] 라고 하면 땡. str[::-1]

3. if a != b

       print("false")

 

1차

[접근 고민] 30분 하자. 7시 20분까지.

- Input으로 문자열 s가 주어질거야.

  -> (1) 다 소문자로 바꿔주자.

       (2) 특수 기호 없애주고 

       (3) 공백도 없애주자

  -> (4) 새롭게 만들어진 s를 / 뒤집은걸 새로운 변수로 t라고 해보자. (파이썬 뒤집기 사용. [:-1])

 

이 둘이 같으면 -> true, 다르면 -> false 라고 해주면 될 것 같은데. 

 

// 지금 시각 6시 54분. ("할 수 있어")


[코드 짜기] 15분만 해보자. 모르면 모르는거임 코드 짜는건. 7시 10분까지. 

- 문법들 검색을 허함 (대소문자 변환 등)

 

내 생각으로 짜본 나의 코드. 

s = str(input())
s = s.lower()
s.replace(", , : ", " ")
s.replace(" ", "")

t = s[::-1]

if t == s:
    print("true")

else:
    print("false")

-> 되는데....? 

-> 아... 간단한건 되는데 문제 속 panama 문장 넣어보니 안되네ㅠ


[올바른 코드를 확인해보자]

 

1. 리스트로 변환해서 하는 방법

def isPalindrome(self, s:str) -> bool:
    strs=[]
    for char in s:
        if char.isalnum():
            strs.append(char.lower())

    while len(strs)>1:
        if strs.pop(0) != strs.pop():
            return False

    return True

 

2. 데크 자료형을 이용한 최적화

from collections import deque

def isPalindrome(self, s:str) -> bool:
    strs:Deque = collections.deque()

    for char in s:
        if char.isalnum():
            strs.append(char.lower())

    while len(strs)>1:
        if strs.pop(0) != strs.pop():
            return False

    return True

3번째줄은 오류 - 임포트가 왜 안되징

 

3. 슬라이싱 사용

import re

def isPalindrome(self, s:str) -> bool:
    s = s.lower()
    s = re.sub('[^a-z0-9]', '', s)

    return s == s[::-1]

 

cf) 정규 표현식 - https://wikidocs.net/1642

cf) 문자 클래스([ ]) 안에는 어떤 문자나 메타 문자도 사용할수 있지만 주의해야 할 메타 문자가 1가지 있다. 그것은 바로 ^인데, 문자 클래스 안에 ^ 메타 문자를 사용할 경우에는 반대(not)라는 의미를 갖는다. 예를 들어 [^0-9]라는 정규 표현식은 숫자가 아닌 문자만 매치된다.

cf) re.sub - https://dojang.io/mod/page/view.php?id=2438 

 

 

728x90
반응형

관련글 더보기