Data house
[python] 부분문자열 - 역순 풀이, rindex( ), rfind( ) 본문
Computer Knowledge/코테 대비 오답노트
[python] 부분문자열 - 역순 풀이, rindex( ), rfind( )
l._.been 2023. 5. 19. 13:29728x90
진짜 기본적인 자료구조 문제에 속하는 부분문자열..
예전에 배웠지만 익숙하게 써지질 않는다..ㅠㅠ
이번에도 문제에 나와서 다시 풀어봤는데 다른 사람들이 푼 정답은 간결하고 beautiful 했다.
나 자신 공부해야한다..
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181872
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문자열 myStringrhk pat이 주어진다
- myString의 부분 문자열 중 pat로 끝나는 가장 긴 부분 문자열을 찾아서 return
나의 풀이
def solution(myString, pat):
# pat이 myString 안에서 1개일 때
if myString.count(pat) ==1:
return myString[:myString.index(pat)+len(pat)]
# Pat이 myString 안에서 2개 이상일 때
else:
idx = myString.index(pat)
for i,n in enumerate(myString):
if i >idx and n == pat[0] and pat == myString[i:i+len(pat)]:
idx = i
return myString[:idx+len(pat)]
pat이 myString에 몇개가 있는지 나눠서 접근했는데..
이렇게하면 코드 길이가 장황하고 시간복잡도도 O(n)으로 좋지 않은 듯하다
인상적인 풀이
1. rindex( ), rfind( ) 이용한 풀이
solution=lambda x,y:x[:x.rindex(y)+len(y)]
- rindex()
- 지정 문자열이 마지막 나타나는 위치를 반환
- 지정 문자열이 없는 경우, Exception(= 에러 처리 코드) 반환 (rfind( )는 -1 반환)
- 검색 범위 지정된 경우, start부터 end(포함x) 내에서 검색
************************** find와 index 차이 **********************************
find( ) : 지정 문자열 처음 위치 (없을 땐, -1 반환)
rfind( ) : 지정 문자열 끝 위치 (없을 땐, -1 반환)
index( ) : 지정 문자열 처음 위치 (없을 땐, Exception 반환)
rindex( ) : 지정 문자열 끝 위치 (없을 땐, Exception 반환)
******************************************************************************
2. 역순으로 풀기
def solution(myString, pat):
return myString[:len(myString) - myString[::-1].index(pat[::-1])]
이 풀이가 가장 흔한 풀이같다
'Computer Knowledge > 코테 대비 오답노트' 카테고리의 다른 글
[python] 세개의 구분자 - re 정규식 (0) | 2023.05.20 |
---|---|
[python] 2의 n제곱인지 확인 (1) | 2023.05.20 |
[python] 문자열 여러번 뒤집기 - slicing (0) | 2023.05.15 |
[python] 4개 숫자들 중 중복된 숫자마다 처리 - count(), index() (0) | 2023.05.14 |
[python] 접두사, 접미사인지 알아보기 - startwith, endwith (0) | 2023.05.12 |