문제
https://school.programmers.co.kr/learn/courses/30/lessons/181943
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문자열 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 |
