[Programmers] #181913 - 문자열 여러 번 뒤집기 [Java][C++][Python]
여러 구간 뒤집기 쿼리를 순서대로 적용해 최종 문자열을 구하는 문제.
[Programmers] #181913 - 문자열 여러 번 뒤집기 [Java][C++][Python]
1. 아이디어
queries에 담긴 [s, e] 구간들을 순서대로 하나씩 뒤집어 나가면 되는 문제다. 각 쿼리마다 s와 e를 양 끝에서 좁혀오는 투 포인터로 두 문자를 맞바꾸면 해당 구간이 뒤집히고, 이를 쿼리 개수만큼 반복하면 최종 문자열이 완성된다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N \times Q)$ | $O(N)$ |
($N$ = my_string의 길이, $Q$ = queries의 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public String solution(String my_string, int[][] queries) {
char[] arr = my_string.toCharArray();
for (int[] q : queries) {
reverse(arr, q[0], q[1]);
}
return new String(arr);
}
static void reverse(char[] arr, int s, int e) {
while (s < e) {
char tmp = arr[s];
arr[s] = arr[e];
arr[e] = tmp;
s++;
e--;
}
}
}
1
2
3
4
5
6
7
8
9
10
#include <bits/stdc++.h>
using namespace std;
string solution(string my_string, vector<vector<int>> queries) {
for (auto& q : queries) {
reverse(my_string.begin() + q[0], my_string.begin() + q[1] + 1);
}
return my_string;
}
1
2
3
4
5
6
def solution(my_string, queries):
s = list(my_string)
for a, b in queries:
s[a : b + 1] = s[a : b + 1][::-1]
return "".join(s)
This post is licensed under CC BY 4.0 by the author.