문자열 여러 번 뒤집기
https://school.programmers.co.kr/learn/courses/30/lessons/181913
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- my_string은 영소문자로만 이루어져 있습니다.
- 1 ≤ my_string의 길이 ≤ 1,000
- queries의 원소는 [s, e]의 형태로 0 ≤ s ≤ e < my_string의 길이를 만족합니다.
- 1 ≤ queries의 길이 ≤ 1,000
입출력 예
my_string | queries | result |
"rermgorpsam" | [[2, 3], [0, 7], [5, 9], [6, 10]] | "programmers" |
입출력 예 설명
- 예제 1번의 my_string은 "rermgorpsam"이고 주어진 queries를 순서대로 처리하면 다음과 같습니다.
queries | my_string |
"rermgorpsam" | |
[2, 3] | "remrgorpsam" |
[0, 7] | "progrmersam" |
[5, 9] | "prograsremm" |
[6, 10] | "programmers" |
- 따라서 "programmers"를 return 합니다.
문자열을 이리저리 뒤집어보는 문제입니다.
슬라이싱을 사용하는 문제로, 굳이 주의할 점이라면 인덱스가 어디까지 적용되는지 입니다.
예시를 살펴보면 인덱스 s부터 e까지이므로, 슬라이싱 시 (start, end, step)의 end 부분을 e + 1로 처리해줘야 합니다.
파이썬으로 문제를 풀어보겠습니다.
def solution(my_string, queries):
# my_string을 리스트로 변환합니다.
answer = list(my_string)
# queries에서 s, e를 가져옵니다.
for s, e in queries:
# 인덱스 s부터 e까지의 값을 뒤집습니다.
answer[s:e+1] = answer[s:e+1][::-1]
# 리스트를 공백 없이 하나로 합칩니다.
answer = ''.join(answer)
return answer
문자열 자체를 뒤집는 방법은 없으니 우선 리스트로 변환해줍니다.
리스트로 변환한 다음, queries에서 값을 가져와 s부터 e까지의 인덱스를 뒤집어주도록 합니다.
answer[s:e+1][::-1]은 s부터 e까지 값을 가져온 문자열을, 뒤집는 로직입니다.
마지막으로 리스트인 answer을 공백 없이 하나로 합쳐주면 됩니다.
슬라이싱에서 end 부분만 조심하면 되는 문제였습니다.