코딩테스트

백준 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할지 결정.