fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <deque>
  4. #include <algorithm>
  5. using namespace std;
  6.  
  7. int main(void)
  8. {
  9. ios_base::sync_with_stdio(false); cin.tie(NULL);
  10. int t;
  11. cin >> t;
  12.  
  13. while (t--)
  14. {
  15. string command; //명령어 입력
  16. cin >> command;
  17.  
  18. int n; //입력할 수의 갯수
  19. cin >> n;
  20.  
  21. deque <int> d; //배열의 요소 입력
  22. string temp; //배열 입력
  23. cin >> temp;
  24.  
  25. for (int i = 0; i < temp.length(); i++) //배열 요소 덱에 저장
  26. {
  27. bool flag = true;
  28. if (temp[i] == '[' || temp[i] == ',' || temp[i] == ']') continue; //수가 아닐 경우 제외
  29. if (temp[i - 1] >= '0' && temp[i - 1] <= '9') //이전의 요소가 수일 경우
  30. {
  31. int a = d.back() * 10 + temp[i] - '0'; //10배 증가 후 더하고 다시 넣기
  32. d.pop_back();
  33. d.push_back(a);
  34. flag = false;
  35. }
  36. if(flag) d.push_back(temp[i] - '0'); //이전의 수가 없다면 바로 넣기
  37. }
  38. bool e = false; //에러 체크
  39. bool r = true; //반전 명령어 확인
  40. for (int i = 0; i < command.length(); i++) //명령어 수행
  41. {
  42. if (command[i] == 'D')
  43. {
  44. if (d.empty()) { //비어있다면 에러 메세지 출력 후 종료
  45. cout << "error";
  46. e = true;
  47. break;
  48. }
  49. if (!r) d.pop_back(); //반전상태라면 제일 뒤에 있는 값 제외
  50. else d.pop_front(); //아니라면 제일 앞에 있는 값 제외
  51. }
  52. if (command[i] == 'R') r = !r; //반전 여부 결정
  53. }
  54.  
  55. if (!e) { //에러 메세지가 발생안했다면
  56. cout << '[';
  57. if (!d.empty()) {
  58. if (!r) reverse(d.begin(), d.end()); //반전 상태라면 반전 시킨 후 출력
  59. for (int i = 0; i < d.size() - 1; i++)
  60. cout << d[i] << ",";
  61. cout << d[d.size() - 1];
  62. }
  63. cout << ']';
  64. }
  65. cout << '\n';
  66. }
  67. return 0;
  68. }
Success #stdin #stdout 0s 5628KB
stdin
4
RDD
4
[1,2,3,4]
DD
1
[42]
RRD
6
[1,1,2,3,5,8]
D
0
[]
stdout
[2,1]
error
[1,2,3,5,8]
error