fork download
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3.  
  4. int n, front, cur, back;
  5. /* n : 배열의 크기
  6.   front : 배열의 시작점을 가리키는 화살표 (초기값 = 0)
  7.   cur : 현재 내가 어디점을 가리키는지 저장하는 화살표 (초기값 = 0)
  8.   back : 배열의 마지막 점을 가리키는 화살표 (초기값 = n - 1) */
  9.  
  10. int arr[100001]; // 숫자만 추출해내서 저장하는 배열
  11. bool order; // 현재 배열이 정방향인지 역방향인지 판단
  12. char RD[100001]; // 명령어 R,D를 입력받고 저장하는 배열
  13. char s[400004]; /* 배열을 입력받을 때 '[', ']', ',' 까지
  14. 모두 저장하는 배열 (크기 주의) */
  15.  
  16. int main(void) {
  17.  
  18. int t;
  19. scanf("%d", &t);
  20.  
  21. for (int i = 0;i < t;i++) {
  22. scanf("%s %d %s", RD, &n, s);
  23.  
  24. front = 0;
  25. cur = 0;
  26. order = true;
  27. int s_len = strlen(s);
  28. int idx = 0;
  29.  
  30. for (int j = 0;j < s_len;j++) {
  31. if (s[j] != '[' && s[j] != ']' && s[j] != ',') {
  32. int x = 0;
  33. /* 숫자가 2~3자리 숫자일 수도 있으므로 2~3자리 숫자들을
  34. 하나의 숫자로 만들어 주는 과정 */
  35. while (s[j] != '[' && s[j] != ']' && s[j] != ',') {
  36. x += (s[j] - '0');
  37. x *= 10;
  38. j++;
  39. }
  40.  
  41. x /= 10;
  42. arr[idx++] = x; // 숫자만 추출해서 int배열에 따로 저장
  43. }
  44. }
  45.  
  46. back = idx - 1;
  47. int size = idx; // arr배열의 크기
  48. bool check = true; /* "error"를 출력했냐 안했냐를 판단하는 변수
  49. true면 error가 아니고 false면 error */
  50.  
  51. int RD_len = strlen(RD);
  52. for (int j = 0;j < RD_len;j++) {
  53. if (RD[j] == 'R') {
  54. if (order == true) { // 현재 배열이 정방향이라면
  55. order = false;
  56. cur = back;
  57. }
  58. else { // 현재 배열이 역방향이라면
  59. order = true;
  60. cur = front;
  61. }
  62. }
  63. else { // RD[j] == 'D' 라면
  64. if (size == 0) {
  65. check = false;
  66. printf("error\n");
  67. }
  68.  
  69. if (order == true) {
  70. arr[front++] = 0;
  71. cur = front;
  72. size--;
  73. }
  74. else {
  75. arr[back--] = 0;
  76. cur = back;
  77. size--;
  78. }
  79. }
  80. }
  81.  
  82. if (check == true) {
  83. printf("[");
  84.  
  85. if (order == true) { // 현재 배열이 정방향이라면
  86. for (int j = cur;j <= back;j++) {
  87. if (j == back) printf("%d]\n", arr[j]);
  88. else
  89. printf("%d,", arr[j]);
  90. }
  91. }
  92. else { // 현재 배열이 역방향이라면
  93. for (int j = cur;j >= front;j--) {
  94. if (j == front) printf("%d]\n", arr[j]);
  95. else
  96. printf("%d,", arr[j]);
  97. }
  98. }
  99. }
  100. }
  101.  
  102. return 0;
  103. }
Success #stdin #stdout 0s 5496KB
stdin
1
R
0
[]
stdout
[