문제 푼 날짜 : 2021-09-22
문제 링크 : https://www.acmicpc.net/problem/5430
구현하는 것은 크게 어렵지 않은 문제였다.
다만, 처음에는 입력으로 들어온 숫자들을 파싱한 후에 vector에 넣어줬다.
그리고 'R'명령어가 들어왔을 때 reverse함수를 이용하여 매 번 vector를 뒤집어줬는데, 이 부분에서 시간초과가 났던 것 같다.
앞, 뒤로 원소들을 push, pop해줄 수 있는 deque를 이용하여 문제를 해결할 수 있었다.
// 백준 5430번 : AC
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int T, n;
string p, arr;
vector<int> v;
cin >> T;
while (T--) {
cin >> p >> n >> arr;
string tmp = "";
for (int i = 0; i < arr.length(); i++) {
char ch = arr[i];
if (isdigit(ch)) {
tmp += ch;
} else {
if (tmp.length() != 0) {
v.push_back(stoi(tmp));
tmp = "";
}
}
}
bool errFlag = false;
for (char ch : p) {
if (ch == 'R') {
reverse(v.begin(), v.end());
} else if (ch == 'D') {
if (!v.empty()) {
v.erase(v.begin());
} else {
cout << "error" << '\n';
errFlag = true;
break;
}
}
}
if (!errFlag) {
cout << "[";
for (int i = 0; i < v.size(); i++) {
if (i != v.size() - 1) {
cout << v[i] << ",";
} else {
cout << v[i];
}
}
cout << "]\n";
}
v.clear();
}
return 0;
}
// 백준 5430번 : AC
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
int main() {
int T, n;
string p, arr;
cin >> T;
while (T--) {
cin >> p >> n >> arr;
deque<int> dq;
bool reversed = false;
string tmp = "";
for (int i = 0; i < arr.length(); i++) {
char ch = arr[i];
if (isdigit(ch)) {
tmp += ch;
} else {
if (tmp.length() != 0) {
dq.push_back(stoi(tmp));
tmp = "";
}
}
}
bool errFlag = false;
for (char ch : p) {
if (ch == 'R') {
reversed = !reversed;
} else if (ch == 'D') {
if (!dq.empty()) {
if (reversed) {
dq.pop_back();
} else {
dq.pop_front();
}
} else {
cout << "error" << '\n';
errFlag = true;
break;
}
}
}
if (!errFlag) {
cout << "[";
if (dq.size() > 0) {
if (reversed) {
while (dq.size() > 1) {
cout << dq.back() << ",";
dq.pop_back();
}
cout << dq.back();
} else {
while (dq.size() > 1) {
cout << dq.front() << ",";
dq.pop_front();
}
cout << dq.front();
}
}
cout << "]\n";
}
}
return 0;
}
문제에 주어지는 입력 제한사항도 꼼꼼히 체크하자.