from collections import deque
def ac(orders, arr):
origin = arr
deq = deque(origin)
is_reversed = False
for order in orders:
if order == 'R':
is_reversed = not is_reversed
else:
if len(deq) < 1:
return 'error'
if is_reversed:
deq.pop()
else:
deq.popleft()
if is_reversed:
deq = deque(list(deq)[::-1])
return str(list(deq)).replace(' ', '')
t = int(input())
for _ in range(t):
p = list(input())
n = int(input())
if n == 0:
x = list(map(int, input().strip('[]')))
else:
x = list(map(int, input().strip('[]').split(',')))
print(ac(p, x))
문제 :
해결과정 :
처음엔 단순히 'R' 명령에서 배열 전체를 뒤집고 'D'명령에서 deque를 이용해 popleft를 해서 해결하려고 했다. (배열 전체를 뒤집으면 timeout이 뜬다)
예제는 모두 해결되게 만들었는데 채점을 해보니 value error가 떴다!
그 이유는 n = 0이 들어왔을때 그 다음 x를 입력 받지 않고 바로 x = [] 이렇게 빈 리스트로 초기화 해줬기 때문이었다...
그래도 틀린 이유를 찾아 질문 게시판을 둘러보다가 코드를 최적화 하는 방법을 많이 찾아 적용할 수 있었다.
'R' 명령이 들어올때마다 is_reversed변수를 바꿔주면서 pop을 할지 popleft를 할지 결정하면 배열을 통째로 뒤집는 연산을 하지 않아도 'R'명령을 수행할 수 있다!
이런 방식으로 접근하면 마지막에 'R'이 True일때 한번 뒤집어서 출력해줘야한다!
또한 이 문제에서 배열을 그대로 출력하면 틀렸다고 나온다.
출력형식을 잘 확인해서 문제를 풀도록 하자!