<aside>
💬 lv1
, 문자열 처리
, 서브스트링
주어진 문자열과 서브스트링(substring)에 대해, 문자열 내에서 서브스트링이 나타나는 모든 시작 위치의 인덱스를 찾는 코드를 작성해주세요. 문자열과 서브스트링은 모두 소문자로만 구성되어 있으며, 문자열 내에서 서브스트링이 여러 번 나타날 수 있습니다. 예를 들어, 문자열 "this is a test string"에서 서브스트링 "is"의 위치는 [2, 5]입니다.
입력 (문자열, 서브스트링) | 출력 (서브스트링 시작 위치의 인덱스 리스트) |
---|---|
("this is a test string", "is") | [2, 5] |
("repeat repeat repeat", "peat") | [3, 10, 17] |
("find the substring in the string", "the") | [5, 24] |
문자열 내에서 주어진 서브스트링이 시작되는 모든 위치의 인덱스를 리스트로 반환합니다. 예를 들어, "repeat repeat repeat"에서 "peat"는 3번 나타나며, 각각의 시작 인덱스는 [3, 10, 17]입니다.
</aside>
replace
함수 활용def solution(data):
string, sub = data **#1 변수 설정 및 데이터 처리 준비**
ret = []
s = string.replace(sub, "0"+sub[1:]) **#2 문자열 처리**
for i in range(len(s)): **#3 for 문으로 순회 후 결과 처리**
if s[i] == "0":
ret.append(i)
return ret **#4 최종**
변수 설정 및 데이터 처리 준비
데이터 형태가 탐색할 문자열과 sub
문자열이라서 string, sub = data
string
과 sub
로 분리해줍니다. ret = []
반환할 결과 값을 저장할 문자열 변수 입니다.
문자열 처리
string
문자열에서 sub
를 찾고, sub
문자열의 첫 번째 문자를 0
으로 바꿔주는 작업을 합니다.
for
문으로 순회 후 결과 처리
for i in range(len(s))
문자열 s
의 길이만큼 순회하면서 if s[i] == "0"
문자열 s
의 문자가 0
인 경우의 인덱스 i
를 결과를 반환할 리스트 ret
에 넣어줍니다.
최종
인덱스가 모두 더해진 리스트 ret
을 반환합니다.
replace 함수
문제를 푸는 일은 다양한 아이디어를 떠올릴 수 있는 재밌는 작업입니다. replace
함수를 사용해 체크하기 좋은 문자로 변경해두고, 그 값의 자리를 인덱스로 받는 풀이도 좋은 아이디어 입니다.
'문자열'.replace('문자', '희')
을 실행하면 '문자열'
에서 '문자'
를 찾고, '희'
로 변경하여 '희열'
이라는 결과를 반환하게 됩니다.find
함수의 활용def solution(data):
string, target = data #1 변수 설정 및 데이터 처리 준비
start = 0
result = []
while True:
start = string.find(target, start) #2 start 인덱스 찾기
if start == -1: #3 부분 문자열을 찾지 못했다면
break
result.append(start) #4 찾은 부분 문자열 처리
start += 1
return result #5 최종
변수 설정 및 데이터 처리 준비
string
변수에는 검색 대상 문자열이, target
변수에는 찾고자 하는 부분 문자열이 할당됩니다. start
변수는 검색 시작 위치를 나타내는 인덱스입니다. 초기 값은 0
입니다. result
리스트는 찾은 부분 문자열의 시작 인덱스를 저장할 리스트입니다.
start 인덱스 찾기
string.find(target, start)
는 string
에서 target
을 start
인덱스부터 찾습니다. 찾은 부분 문자열의 시작 인덱스를 start
변수에 할당합니다.
부분 문자열을 찾지 못했다면
부분 문자열을 찾지 못한 경우 start
는 -1
이 됩니다. start
가 -1
이면 더 이상 찾을 부분 문자열이 없다는 의미이므로 break
를 사용하여 루프를 종료합니다.
찾은 부분 문자열 처리
찾은 부분 문자열의 시작 인덱스 start
를 result
리스트에 추가합니다. start
를 1
증가시켜 다음 검색 시작 위치를 설정합니다.