https://www.acmicpc.net/problem/5430
풀이법
1) Deque를 이용하여 문제를 해결하였다.
2) 구현 또한 포함되어 있는 부분이기에, 문제의 예제에서 \n와 break가 어디에 들어갈 수 있는지가 중요할 것이다.
#include <string>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <math.h>
#include <map>
#define INF 987654321
using namespace std;
int t;
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
cin >> t;
for (int p = 0; p < t; p++)
{
deque<int> dq;
string s;// 어떤 functoin
cin >> s;
int arrSize; //사이즈
cin >> arrSize;
string sArr;
cin >> sArr; //배열
string temp;//2자리 이상의 숫자를 위해
for (int i = 0; i < sArr.size(); i++)
{
if (sArr[i] == '[')
continue;
else if (sArr[i] >= '0' && sArr[i] <= '9')
temp += sArr[i];
else if (sArr[i] == ',' || sArr[i] == ']')
{
if (!temp.empty())
{
dq.push_back(stoi(temp));
temp.clear();
}
}
}
bool check = true;//정방향
bool check2 = false;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == 'R')
{
if (check == true)
check = false;//역방향
else
check = true;
}
else if (s[i] == 'D')
{
if (check == true)
{
if (!dq.empty())
dq.pop_front();
else
{
cout << "error" << "\n";
check2 = true;
break;
}
}
else if (check == false)
{
if (!dq.empty())
dq.pop_back();
else
{
cout << "error" << "\n";
check2 = true;
break;
}
}
}
}
if (check2 == true)
continue;
if (check == true)
{
cout << "[";
int b = dq.size();
for (int i = 0; i < b; i++)
{
int temp = dq.front();
dq.pop_front();
cout << temp;
if (!dq.empty())
cout <<",";
}
cout << "]" << "\n";
}
else if (check == false)
{
cout << "[";
int b = dq.size();
for (int i = b-1; i >= 0; i--)
{
int temp = dq.back();
dq.pop_back();
cout << temp;
if (!dq.empty())
cout << ",";
}
cout << "]" << "\n";
}
}
}
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 2294번: 동전 2(C++) (0) | 2021.07.21 |
---|---|
BaekJoon 11048번: 이동하기(C++) (0) | 2021.07.21 |
BaekJoon 6118번: 숨바꼭질 (0) | 2021.07.19 |
BaekJoon 1303번: 전쟁 - 전투(C++) (0) | 2021.07.19 |
BaekJoon 2467번: 용액(C++) (0) | 2021.07.18 |