코딩테스트
백준 5430 AC - 파이썬
돈벌자돈
2023. 9. 14. 10:19
import sys
from collections import deque
input = sys.stdin.readline
T = int(input())
for i in range(T):
command = [s for s in input()] # 명령어
command.pop() # 개행 제거
n = int(input())
num = eval(input())
arr = deque(num)
flag = 0
reverseCnt = 0 # 뒤집기 갯수 세는 용도
for c in command:
if c == 'R':
reverseCnt += 1
elif c == 'D':
if len(arr) == 0:
print("error")
flag = 1
break
else:
if reverseCnt % 2 == 0:
# 뒤집기 횟수가 짝수일때
arr.popleft()
else:
# 뒤집기 횟수가 홀수일떄
arr.pop()
if flag == 0:
if reverseCnt % 2 == 0:
print("[" + ",".join(map(str, arr)) + "]")
else:
arr.reverse()
print("[" + ",".join(map(str, arr)) + "]")
입력 받는게 좀 귀찮게 되어있는 문제.
뒤집기 명령어가 나올때 단순히 reverse() 메소드를 사용하면 시간 초과 발생. (reverser() 메소드는 O(N) 복잡도를 가지고 있다.)
따라서 이 부분을 최적화 하는게 관건임.
해결 방법은 반복문 내에서 reverse() 함수를 따로 사용하지 않고 단순히 뒤집는 횟수만을 체크 하고
뒤집는 횟수의 짝수홀수 여부를 이용해서 앞에서 pop할지 뒤에서 pop할지 결정.