#include <bits/stdc++.h>
using namespace std;
int T, n;
string p, arrStr;
void Parsing(string arr, deque<int>& dq)
{
string numStr = "";
for (int i = 1; i < arr.size() - 1; i++)
{
if (arr[i] == ',')
{
dq.push_back(stoi(numStr));
numStr = "";
}
else
{
numStr += arr[i];
}
}
dq.push_back(stoi(numStr));
}
int main()
{
cin >> T;
while (T--)
{
cin >> p;
cin >> n;
cin >> arrStr;
deque<int> dq;
if(n != 0)
Parsing(arrStr, dq);
int size = p.size();
int Rcount = 0;
bool error = false;
for (int i = 0; i < size; i++)
{
if (p[i] == 'R')
{
Rcount++;
}
else
{
if (dq.empty())
{
cout << "error\n";
error = true;
break;
}
if (Rcount % 2)
{
dq.pop_back();
}
else
{
dq.pop_front();
}
}
}
if (!error)
{
if (Rcount % 2)
{
reverse(dq.begin(), dq.end());
}
string answer = "";
answer += "[";
for (int i = 0; i < dq.size(); i++)
{
answer += to_string(dq[i]);
answer += ",";
}
if(answer.size() != 1)
answer.pop_back();
answer += "]";
cout << answer << '\n';
}
}
return 0;
}
이거 쉬운데 왜 20%지? 하다가 아 이래서 20%였구나 했던 문제(그거 감안해도 20%는 아닌것같긴함)
무턱대고 R과 D를 만날때마다 연산을 해주면 시간 초과 날 것임
핵심 포인트를 생각해보면
1. R의 개수 -> 여기까지는 다들 생각했을 것 같다. R이 짝수이면 안뒤집어도 되니까
2. D 연산 -> 자료구조를 적절히 선택해서 D를 만났을 때 어떤 요소를 뺄 지 잘 생각하면 된다
벡터를 쓰면 pop_back() 밖에 못 쓰니까 표현에 제한이 있다. 그래서 양쪽으로 뺄 수 있는 deque를 사용했음
그리고 D를 만났을 때 지금까지 만난 R의 개수를 세어 R이 홀수이면 뒤집고 앞을 빼는거니까 그냥 안뒤집고 뒤를 빼면 된다
R이 짝수이면 그냥 앞을 빼주면 됨
이렇게 연산이 끝나면 마지막 R 처리를 해준다. R이 홀수면 최종으로 배열을 뒤집고 짝수면 냅둔다
이렇게 쉽게 끝날 줄 알았는데 귀찮은 게 있었다
파싱인데 입력이 [1,2] 처럼 들어오고 출력도 [1,2] 처럼 출력해야 한다
그래서 파싱을 생각해줘서 구현해주고 마지막으로 내가 처음에 틀린건데 빈 배열일 경우 [] << 이렇게 출력 잘해야한다