AC는 정수 배열 연산을 위한 언어다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다.
함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다.
배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과는?
deque를 이용해서 푸는 문제이다.
입력이 좀 까다롭다고 느껴졌다. 연산할 정수 배열이 "배열"형태로 주어지기 때문에 앞뒤로 붙은 []와 ,를 파싱해야 한다.
python에서 제공되는 strip으로 []와 뒤에 붙는 개행 문자를 제거하고, split을 이용해서 ,를 기준으로 나누었다. 빈 배열이 들어오는 경우를 처리하기 위해 if nums[0] != '':
를 통해 처리했다. 이렇게 파싱한 결과를 deque에 저장한다.
nums = list(input().strip("[]\n").split(","))
if nums[0] != '':
nums = list(map(int, nums))
nums = deque(nums)
else:
nums = []
R 연산의 경우 매번 reverse를 하게되면 시간 초과가 발생한다. 따라서 R 연산을 짝수번 수행했는지, 홀수번 수행했는지 저장하는 플래그를 이용했다.
D 연산의 경우에 R을 짝수번 수행한 경우 맨 앞의 원소를 pop, 홀수번 수행한 경우에는 맨 뒤의 원소를 pop한다. 위에서 구한 플래그에 따라 연산해주면 된다.
count_reverse = 1 # 1: 원상태 2: 한번 reverse된 상태
for f in funcs:
if f == 'R':
count_reverse *= -1
elif f == 'D':
if len(nums) == 0:
flag = False
print("error")
break
elif count_reverse == 1:
nums.popleft()
else:
nums.pop()
결과의 출력에 약간의 낚시가,, 있는데 파이썬의 리스트 그대로 출력하면 안된다. 정답의 출력 형태는 [1,2,3,5,8]
와 같이 원소를 나누는 , 뒤에 띄어쓰기가 없기 때문,,
print("[", end='')
if len(nums) > 0:
if count_reverse == 1:
for i in range(len(nums)-1):
print(nums[i], end=',')
print(nums[-1], end='')
else:
for i in range(len(nums)-1, 0, -1):
print(nums[i], end=',')
print(nums[0], end='')
print("]")
따라서 위와 같이 처리해주었다.
import sys
from collections import deque
input = sys.stdin.readline
T = int(input())
answer = []
for t in range(T):
funcs = list(input().strip())
N = int(input())
nums = list(input().strip("[]\n").split(","))
if nums[0] != '':
nums = list(map(int, nums))
nums = deque(nums)
else:
nums = []
flag = True
count_reverse = 1 # 1: 원상태 2: 한번 reverse된 상태
for f in funcs:
if f == 'R':
count_reverse *= -1
elif f == 'D':
if len(nums) == 0:
flag = False
print("error")
break
elif count_reverse == 1:
nums.popleft()
else:
nums.pop()
if flag:
print("[", end='')
if len(nums) > 0:
if count_reverse == 1:
for i in range(len(nums)-1):
print(nums[i], end=',')
print(nums[-1], end='')
else:
for i in range(len(nums)-1, 0, -1):
print(nums[i], end=',')
print(nums[0], end='')
print("]")