프로그래머스 문자열 여러 번 뒤집기 문제 바로가기

reverse() function

vector나 string에 대해서 reverse()함수를 이용하면 특정 부분을 거꾸로 만들 수 있다.

vector<int> nums = {1, 2, 3, 4, 5};
reverse.(nums.begin(), nums.end());
cout << nums << endl; // (5, 4, 3, 2, 1)

reverse.(nums.begin(), nums.begin()+3); // 1~3번째 원소에 대해서만 reverse
cout << nums << endl; // (3, 4, 5, 2, 1)

이 함수를 이용해 풀면 다음과 같다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string solution(string my_string, vector<vector<int>> queries) {
    for (vector<int> q: queries){
        reverse(my_string.begin()+q[0], my_string.begin()+q[1]+1);
    }
    return my_string;
}

여담 - Python과의 비교

python의 경우 slicing을 이용해서 arr[i:j+1] = arr[j:i-1:-1]만 해도 해결 가능한데 C++은 조금 귀찮긴 하다… 그나마 reverse() function이 있어서 일일히 부분 복사해서 붙여넣기 안해도 되니까 다행인듯!!

References