#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
int main()
{
int T = 0;
std::cin >> T;
for (int i = 0; i < T; ++i)
{
std::string s = {};
std::cin >> s;
int iSize = 0;
std::cin >> iSize;
std::string sVec = {};
std::cin >> sVec;
std::deque<int> deque = {};
std::string sNumber = {};
for (int j = 1; j < sVec.size(); ++j)
{
if (sVec[j] == ',' || sVec[j] == ']')
{
if (!sNumber.empty())
{
deque.push_back(stoi(sNumber));
}
sNumber = "";
}
else
{
sNumber += sVec[j];
}
}
bool bReverse = false;
bool bSuc = true;
for (int j = 0; j < s.size(); ++j)
{
if (s[j] == 'R')
{
bReverse = !bReverse;
}
else
{
if (deque.empty())
{
std::cout << "error\n";
bSuc = false;
break;
}
else
{
if (bReverse)
{
deque.pop_back();
}
else
{
deque.pop_front();
}
}
}
}
if (!bSuc)
continue;
sVec = "[";
if (!bReverse)
{
for (int j = 0; j < deque.size(); ++j)
{
sVec += std::to_string(deque[j]);
if (deque.size() - 1 != j)
sVec += ',';
}
}
else
{
for (int j = deque.size() - 1; j >= 0; --j)
{
sVec += std::to_string(deque[j]);
if (j)
sVec += ',';
}
}
sVec += ']';
std::cout << sVec << "\n";
}
return 0;
}
앞뒤로 전부 빼야하는데 리버스하기엔 복잡할 것 같아서 deque로 만들었습니다.
R일 경우 bool 값을 줘서 앞뒤 빼거나 순서를 바꿨습니다.
처음엔 vec를 empty인가 확인해서 풀었더니 하나도 없을 경우 아무것도 출력을 안하고 끝내서 틀렸습니다.
bool값을 하나 더 넣어서 성공인지 실패인지 확인하는 것도 입력해놓았고 성공했습니다.
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 6064 카잉달력 (0) | 2022.09.15 |
---|---|
[C++] 백준 5545 IOIOI (0) | 2022.09.14 |
[C++] 백준 1992 쿼드트리 (0) | 2022.09.12 |
[C++] 백준 11726 2xn 타일링 (0) | 2022.09.10 |
[C++] 백준11279 최대 힙 (0) | 2022.09.07 |