문제
접근
문제 자체보다 입출력 처리가 더 까다로웠다..
문제는 거꾸로 뒤집는다고 진짜로 배열을 뒤집고 있으면 안된다.
아마 100% 시간초과가 뜰 것이다.
D일 때 앞에서만 뺀다고 했다.
거꾸로 뒤집는다는 것은 뒤에서 빼겠다는 말과 동일하다.
결국 덱으로 구성해주고 R의 횟수에 따라 앞에서 뺄지 뒤에서 뺄지를 정해주면 된다.
다 수행한 후에 R의 횟수를 통해 최종적으로 1번만 뒤집을지 말지 결정한다.
코드
- 파이썬 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from collections import deque
def conductCommand(arr, command):
q = deque(arr)
idx = 0
for c in command:
if c == 'R':
idx = (idx+1) % 2
elif c == 'D':
if len(q) == 0:
return 'error'
if idx == 0:
q.popleft()
else:
q.pop()
if idx:
q.reverse()
q = list(map(str, q))
return'['+','.join(q)+']'
t = int(input())
for _ in range(t):
command = list('.'.join(input().split()))
n = int(input())
arr = input().split()[0]
arr = arr[1:-1]
if len(arr) == 0:
arr = []
else:
arr = list(map(int, arr.split(',')))
print(conductCommand(arr, command))