코딩 기초 트레이닝

문자열 여러 번 뒤집기

욱스917 2024. 8. 8. 18:00

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 ≤ se < 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 부분만 조심하면 되는 문제였습니다.