이 페이지의 모든 내용은 저자 박상길 님의 파이썬 알고리즘 인터뷰를 기반으로 정리한 내용임을 밝힙니다.
풀이
1. 리스트 변환(MY), 2.데크자료형을 이용한 최적한
3.슬라이싱 사용
def isPalindrome(s) :
s=s.lower
s=re.sub([^a-z0-9]','',s)
#영숫자가 아닌것을 공백으로 전환
return s == s[::-1]
=> 정규식으로 불필요한 문자를 필터링( = 데이터 클렌징, 입력값에 대한 전처리작업)
islanum 영문자,숫자 여부를 판별하는 함수. 영문자,숫자가 아니라면 Fasle
문자열을 조작할때는 항상 슬라이싱을 우선적으로 생각하자 ( 속도 개선 )
리스트의 index랑 num을 착각하지말자
ex ) len(str) = 4, str[-1] = str(len(str)-1) != str(len(str))
풀이
1. 투포인터를 이용한 스왑
말 그대로 두 개의 포인터를 범위를 조정해가며 풀이
def re_string(s) :
left, right = 0, len(s)-1
while left<right:
s[left],s[right] = s[right],s[left]
left+=1
right-=1
def re_string(s) :
s.reverse()
요구 조건을 얼마나 깔끔하게 처리하는가. 실무에서도 자주 쓰이는 로직
문자로 구성된 로그가 숫자 로그보다 이전에 오네. 숫자 로그는 입력 순서로 두고
그렇다면! 문자와 숫자를 구분하고 숫자를 나중에 그대로 이어붙이자. ( 구분할 생각을 하다니)
문자는 letters에 숫자는 digits에 추가하자. 그리고 이제 문자 로그를 모두 모았으니 기준에 따라 정렬해보자.
풀이
1. 람다와 연산자를 이용
def orderlog(logs) :
letters, digits =[], []
for log in logs :
if log.split()[1].isdigit() :
digits.append(log)
else:
letters.append(log)
# 2개의 키를 람다표현식으로 정렬
letters.sort(key=lambda x: (x.split()[1:],x.split()[0]))
return letters+digits
isdigit 문자열로 구성된 숫자를 판별.
sort함수에 key( 정렬 기준. 1순위, 2순위.. )를 제공하여 희망하는 상태로 정렬