6장 문자열 조작 - 1,2,3

·2021년 1월 17일
0

Python

목록 보기
2/7

이 페이지의 모든 내용은 저자 박상길 님의 파이썬 알고리즘 인터뷰를 기반으로 정리한 내용임을 밝힙니다.

1번 유효한 팰린드롬

풀이
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
  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순위.. )를 제공하여 희망하는 상태로 정렬

profile
세상은 너무나도 커

0개의 댓글