반응형
문제 링크: https://www.acmicpc.net/problem/5430
문제 풀이
[주의 1]
R 연산을 할 때마다 reverse 함수를 사용하면 시간 초과가 납니다.
왜냐하면
reverse 함수가 O(N)의 시간복잡도가 걸리니깐
전체 O(n * len(p))의 시간복잡도가 걸립니다.
p의 길이가 0 <= len(p) <= 100,000,
n의 범위가 0 <= n <= 100,000 이므로
만약에 p가 전부 R로 이루어져 있고, n = 100,000 이면
O(10^5 * 10^5) = O(10^10)이 되니깐 시간제한 1초 안에 해결할 수 없습니다.
[주의 2]
빈 배열에서 R연산을 해도 error가 아니다
reverse 함수를 사용하지 않고 R연산을 구현하는 방법은
deque를 사용하면 됩니다.
D연산을 배열의 앞과 뒤에서 할 수 있는데
처음엔 앞에서 시작해서 R연산을 할 때마다 앞, 뒤를 바꿔주면 됩니다.
<c++ 소스 코드> deque 덱, 자료구조
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#include <iostream>
#include <deque>
#include <string>
#include <vector>
using namespace std;
//false return is error
bool solve(deque<int> &x, string& p, bool& flag) {
flag = true; //true = queue, false = stack
for (auto& c : p) {
if (c == 'R') flag = !flag;
else if (c == 'D' && x.empty()) {
return false;
}
else if (c == 'D' && flag) { //queue
x.pop_front();
}
else if (c == 'D' && !flag) { // stack
x.pop_back();
}
}
return true;
}
void print_x(bool flag, deque<int> &x) {
if (flag) { //queue
cout << '[';
while (!x.empty()) {
cout << x.front(); x.pop_front();
if(!x.empty())cout << ',';
}
cout << ']';
}
else { //stack
cout << '[';
while (!x.empty()) {
cout << x.back(); x.pop_back();
if (!x.empty())cout << ',';
}
cout << ']';
}
cout << '\n';
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int test_case; cin >> test_case;
while (test_case--) {
string p; cin >> p;
int n; cin >> n;
string s; cin >> s;
deque<int> x;
string num;
s.erase(s.begin());
for (auto& c : s) {
if (c == ',' || c == ']' && num.size()) {
x.push_back(stoi(num));
num.clear();
}
else if (c >= '0' && c <= '9') {
num.push_back(c);
}
}
bool flag = true;
if (solve(x, p, flag)) {
if (flag) print_x(true, x);
else print_x(false, x);
}
else {
cout << "error\n";
}
}
return 0;
}
|
cs |
반응형
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 7576번] 토마토 (0) | 2021.11.03 |
---|---|
[백준 4949번] 균형잡힌 세상 (0) | 2021.11.01 |
[백준 2164번] 카드2 (0) | 2021.10.27 |
[백준 6198번] 옥상 정원 꾸미기 (0) | 2021.10.21 |
[백준 2493번] 탑 (2) | 2021.10.15 |