1 minute read

문제

접근 방법

맨 앞을 버려야 한다는 것에서 deque를 사용해야 한다는 것이 우선 생각났다. 그러다가 배열을 뒤집는다면 맨 뒤에서 버려야 한다는 점에서 deque를 무조건 써야되겠다고 생각했다 ㅋㅋ

그리고 list의 reverse는 list 안에 원소의 개수만큼의 시간이 소요되므로 실제로 뒤집지 않고 flag 형태로 reverse가 되었는지 안 되었는지를 저장하면서 진행해야겠다고 생각했다.

여기서 제일 어려웠던건 문자열 처리였다. 입력을 받을 때 str 형태로 받기 때문에 숫자들이 ‘2’처럼 되어 있어서 마지막 답 출력할 때 int로 바꾸려고 했는데 str -> int는 안된다는 에러가 떠서 당황했다. 그래서 int로 바꾸지 않고 다른 방법을 생각해야했다. 문자열을 합치는데 빠른 모듈을 고민하다가 나온게 join이었다.

’,’.join([‘a’, ‘b’, ‘c’])를 하면 ‘a’,’b’,’c’가 아니라 a,b,c 로 나온다는 것을 이용하여 출력 문제를 해결했다. 이건 무조건 기억해야겠다…

정답 코드

import sys
from collections import deque
input = sys.stdin.readline

'''
맨 앞 또는 맨 뒤를 버려야 하므로 deque를 사용해야 한다는 것을 우선 생각했다.

실제로 배열을 뒤집으면서 진행하기 위해서는 O(N)의 시간이 걸리기 때문에 배열이 뒤집혔는지 아닌지만 저장하면서 진행하면 될 거 같다고 생각했다.

'''

test = int(input())
for _ in range(test):
  p = list(input().rstrip())
  n = int(input())
  nums = deque(input().rstrip()[1:-1].split(','))
 
  reversed = False
  error = False
  for cmd in p:
    if cmd == 'R':
      if not reversed:
        reversed = True
      else:
        reversed = False
      
    else:
      # 뒤집혔다면 맨 뒤를 없애기
      if reversed:
        if n > 0:
          nums.pop()
          n-=1
        else:
          error = True
          break
      # 안 뒤집혔다면 맨 앞을 없애기
      else:
        if n>0:
          nums.popleft()
          n-=1
        else:
          error = True
          break

  if error:
    print("error")
  else:
    nums = list(nums)
    if reversed:
      nums.reverse()
      print("["+",".join(nums)+']')
    else:
      print("["+",".join(nums)+']')