leetcode.com/problems/valid-palindrome/
(내 이름은 이효리 거꾸로 해도 이효리)
tenet, level, rotator 등이 대표적인 예입니다.
주어진 예문이 단순 단어라면 편하겠지만
만약 아래와 같은 특수기호를 포함한 문장이 주어진다면
특수기호를 어떤 방식으로 걸러내야 할까요?
string = '여보게 저기! 저게 보여?'
.isalnum() 메소드는 영문자, 숫자만을 걸러주는 기능을 합니다.
따라서 물음표 따옴표 등 특수기호는 걸러집니다.
def isPalindrome(string: str) -> bool:
string = list(filter(lambda x: x.isalnum(), string.lower()))
return string == string[::-1]
# leetcode 사이트 런타임 시간: 36ms
정규표현식으로도 필터링을 할 수 있습니다.
re 모듈을 사용하면 re.sub() 이라는 메소드를 사용할 수 있습니다.
개인적으로 filter와 람다식을 쓰는 방식보다
re.sub() 가 훨씬 가독성이 좋은 것 같습니다.
import re
def isPalindrome(string: str) -> bool:
string = re.sub('\W', '', string.lower()) #숫자나 문자가 아닌 것을 지우는 코드
return string == string[::-1]
# leetcode 사이트 런타임 시간: 24ms
re.sub()은 주어진 문자열에 첫번째 인자인 교체 패턴을 적용시켜 값을 replace 시킵니다.
2-1-1. 교체 패턴
정말 수많은 교체 패턴이 존재하지만...
여기 팰린드롬을 판별을 위해서 쓸 수 있는 몇 가지만 언급하자면 아래와 같습니다.
문자 클래스
그리고 원래 기본적으로 문자 클래스는 [] 로 표기합니다.
[] 안에 들어간 규칙이 포함된 문자열이 교체대상이 됩니다.
예를 들면 아래와 같습니다.
string = 'Hahahaha'
string = re.sub('[a]', 'i', string) #모든 a를 i로 변경
print(string)
# 결과: Hihihihi
[a-z]는 소문자 a부터 z까지를 뜻합니다.
[0-9]는 모든 숫자를 뜻합니다.
그리고 문자 클래스 앞에 ^가 붙으면 반대의 뜻을 가지게 됩니다.
예시로 이해해봅시다.
2-1-2. 교체 수 설정
기본값은 0으로, 패턴에 해당되는 모든 값을 변경합니다.
count값을 설정해주면 설정해준 값만큼만 값이 변경됩니다.
string = 'Hahahaha'
string = re.sub('[a]', 'i', string, count=2)
print(string)
# 결과: Hihihaha
백준 / DFS / 2667 : 단지번호 붙이기 / 파이썬 (0) | 2021.03.23 |
---|---|
프로그래머스 / 크레인 인형뽑기 게임 / level 1 / 파이썬 (1) | 2021.03.21 |
백준 / 동적 계획법(DP) / 1904 / 파이썬 (0) | 2021.03.03 |
플로이드의 토끼와 거북이 알고리즘(Floyd's Tortoise & Hare Algorithm) / 증명 / leetcode 287번 / 파이썬 (5) | 2021.02.22 |
프로그래머스 / 해시 / 위장 / level 2 / 파이썬 (0) | 2021.02.21 |
댓글 영역