문제
https://school.programmers.co.kr/learn/courses/30/lessons/181943
문제 설명
문자열 my_string
, overwrite_string
과 정수 s
가 주어집니다. 문자열 my_string
의 인덱스 s
부터 overwrite_string
의 길이만큼을 문자열 overwrite_string
으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
my_string
와overwrite_string
은 숫자와 알파벳으로 이루어져 있습니다.- 1 ≤
overwrite_string
의 길이 ≤my_string
의 길이 ≤ 1,000 - 0 ≤
s
≤my_string
의 길이 -overwrite_string
의 길이
입출력 예
my_string | overwrite_string | s | result |
"He11oWor1d" | "lloWorl" | 2 | "HelloWorld" |
"Program29b8UYP" | "merS123" | 7 | "ProgrammersS123" |
Code
1차 시도 (실패)
def solution(my_string, overwrite_string, s):
return my_string.replace(my_string[s:s + len(overwrite_string)], overwrite_string)
처음에는 단순히 replace()
를 이용하여 인덱스 s
부터 s + len(overwrite_string) - 1
(target 문자열) 까지의 문자를 overwrite_string
으로 치환하는 방식을 떠올렸지만, 다음과 같은 예외가 발생한다.
my_string | overwrite_string | s | 기댓값 | 출력값 |
"He11oWor1dHe11oWor1d" | "lloWor" | 12 | "He11oWorldHelloWorld" | "HelloWorldHelloWorld" |
즉, my_string
에 target 문자열(s + len(overwrite_string) - 1
)이 여러 번 나올 경우,
s
인덱스부터 단 한 번만 치환해야 하는데 replace()
를 사용하면 모든 문자열을 바꾸어버린다.
그래서 replace()
에 옵션을 주어서 단 한번만 치환하는 방식도 생각했지만, 변수가 많으므로 그냥 substring 을 이용하는 방식이 가장 깔끔할 것 같아서 다음과 같이 작성하였다.
최종 코드
def solution(my_string, overwrite_string, s):
return my_string[:s] + overwrite_string + my_string[len(overwrite_string) + s:]
my_string[:s]
:0
부터s-1
인덱스까지my_string
부분 문자열overwrite_string
:my_string[s:s + len(overwrite_string)
를overwrite_string
으로 치환my_string[len(overwrite_string) + s:]
: target 문자열을overwrite_string
로 치환한 뒤 남은 문자열
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Lv.0/Python] 수열과 구간 쿼리 2 (0) | 2023.06.24 |
---|---|
[Lv.0/Python] 수열과 구간 쿼리 1 (0) | 2023.06.24 |
[Lv.0/Python] 짝수의 합 (0) | 2023.06.23 |
[Lv.0/Python] 각도기 (0) | 2023.06.23 |
[Lv.0/Python] 두 수의 나눗셈 (0) | 2023.06.23 |