LeetCode#125. Valid Palindrome

BLAKE KIM·2021년 1월 19일
0

Algorithm

목록 보기
1/4

LeetCode#125. Valid Palindrome

문제.

문제를 읽으면서 들었던 생각.

첫째, 숫자와 알파벳을 제외한 다른 문자와 공백들을 삭제한다.
둘째, 거꾸로 뒤집어서 비교한다.

내 코드.

생각에 대한 해결책

첫째, 정규표현식을 사용하여 숫자와 문자만 다른 변수에 담는다.
둘째, reversed()를 통해 거꾸로 뒤집는다.

다른 풀이에서 얻은 것.

isalnum() : 영문자, 숫자 여부를 판별하는 함수. 이걸 알고 있었다면 굳이 정규표현식을 이용하지 않아도 판별할 수 있다. 적용하면 아래와 같이 된다.

for i in s:
    if i.isalnum():
        result += i

거꾸로 뒤집지 않아도 된다. : pop()을 이용하는 방법이다. pop()은 인덱스를 지정할 수 있다. 즉 s에 있는 영문자와 숫자만을 리스트에 담은 후 반복문을 통해 맨 앞과 맨 뒤의 값을 비교하는 것이다. str_list는 영문자와 숫자만을 담은 리스트로 판단하고 보자.

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

Deque: 자료구조로써 위의 pop()을 이용한 풀이에서 List에 담는 것이 아닌 Deque에 담는 것 만으로도 성능 향상이 나타난다. 또한 pop(0)보다 popleft()를 이용하면 성능 향상을 이룰 수 있다.

정규표현식: 내 코드에 사용된 match가 아닌 re.sub()을 이용하여 한 번에 필터링 가능하다.

s = s.lower()
s = re.sub('[a-z0-9]', '', s)	# 내 코드의 마지막 result의 모습과 동일

슬라이싱: 파이썬을 처음 공부할 때도 슬라이싱을 잘 활용하고자 했는데 다시 돌아온 지금도 동일하다. 문자열 슬라이싱은 내부적으로 매우 빠르게 동작하므로 사용하는 것이 좋다.

return s == s[::-1]		# reversed()도, 조건문도 필요없다.
profile
BackEnd

0개의 댓글