알쓸코지
article thumbnail

문제

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_stringoverwrite_string은 숫자와 알파벳으로 이루어져 있습니다.
  • 1 ≤ overwrite_string의 길이 ≤ my_string의 길이 ≤ 1,000
  • 0 ≤ smy_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()를 사용하면 모든 문자열을 바꾸어버린다.

위의 코드 실행 결과 : 테스트 6 실패

그래서 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
profile

알쓸코지

@chocoji

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!