티스토리 뷰
파이썬 문제 풀이 첫 포스팅이다. 파이썬 같은 인터프리터 언어는 알고림즘의 처리 속도가 Java나 C 보다 느린 것이 단점이지만, 이를 보완하고도 남을만큼 코드를 간단하게 작성할 수 있다는 장점이 있다. Java 프로그래머스 연습 문제 풀이가 얼마 안남았긴 한데, 남은 문제들의 난이도가 상당해서...파이썬과 함께 기초 알고리즘을 먼저 제대로 짚고 넘어가는 것이 더 좋을 거 같다고 생각했다.
그럼 가장 기초적이고 빈번하게 나오는 "문자열 조작" 부터 차례차례 문제를 풀어나가도록 하겠다.
<유효한 팰린드롬>
팰린드롬은 앞뒤가 똑같은 단어 또는 문장을 말하며, 주어진 문자열이 팰린드롬인지 아닌지 확인하면 되는 문제이다.
앞, 뒤를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.
알고리즘의 속도에 따라 3가지 방법으로 해당 문제를 풀이할 수 있다.
1. 리스트를 이용
def isPalindromeFirst(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
if __name__ == '__main__':
s = "A man, a plan, a canal: Panama"
s2 = "race a car"
print(isPalindromeFirst(s))
print(isPalindromeFirst(s2))
단순하게 리스트를 사용하여 모든 문자를 소문자로 변환하여 삽입한 다음에, 맨 앞 문자와 맨 뒤 문자를 pop하여 비교하여 판별할 수 있다.
2. Deque를 이용
collections 모듈을 임포트하여 deque로 strs를 선언하면 popleft()를 이용하여 좀 더 빨라진다.
import collections
from typing import Deque
def isPalindromeSecond(s: str) -> bool:
# 덱 선언
strs: Deque = collections.deque()
for char in s:
if char.isalnum():
strs.append(char.lower())
while len(strs) > 1:
if strs.popleft() != strs.pop():
return False
return True
if __name__ == '__main__':
s = "A man, a plan, a canal: Panama"
s2 = "race a car"
print(isPalindromeSecond(s))
print(isPalindromeSecond(s2))
3. 슬라이싱
파이썬에서는 문자열을 뒤집는 데 아주 편리한 슬라이싱 기능을 하나 가지고 있다.
[::-1]을 이용하면 별 다른 코드 없이 문자열을 한번에 뒤집을 수 있다.
이 방법을 사용하려면, re 라는 정규 표현식을 사용하여 사용할 문자(영문과 숫자)만 따로 필터링하여 문자열을 재구성해야한다.(정규 표현식은 따로 포스팅할 예정)
from typing import re
def isPalindromeThird(s: str) -> bool:
s = s.lower()
#정규식으로 불필요한 문자 필터링
# s 안에 a-z, 0-9가 아닌 모든 문자를 공백으로 바꾸는 정규 표현식
s = re.sub('[^a-z0-9]', '', s)
# [::-1] -> 문자열을 뒤집는 슬라이싱 기
return s == s[::-1]
if __name__ == '__main__':
s = "A man, a plan, a canal: Panama"
s2 = "race a car"
print(isPalindromeThird(s))
print(isPalindromeThird(s2))
'[Python] > 문자열 조작' 카테고리의 다른 글
[Python] 문자열 조작 4 <가장 긴 팰린드롬 부분 문자열> (0) | 2021.05.05 |
---|---|
[Python] 문자열 조작 3 <가장 많이 나오는 단어> (0) | 2021.05.03 |
[Python] 문자열 조작 2 <문자열 뒤집기> (0) | 2021.05.03 |
- await
- redux
- 인천 구월동 이탈리안 맛집
- 파니노구스토
- 인천 구월동 맛집
- 정보보안기사 #실기 #정리
- redux-thunk
- Promise
- 맛집
- react
- AsyncStorage
- javascript
- Async
- 이탈리안 레스토랑
- react-native
- Total
- Today
- Yesterday