접근

R 문자가 나왔을 때, 주어진 배열을 실제로 뒤집으면 시간 초과가 뜨게 된다. 따라서 실제로 배열을 뒤집지 않고 문제를 해결할 방법을 찾아야 한다. 나 같은 경우에는 left라는 변수를 만들어 left의 상태에 따라 D 문자가 나왔을 때, 왼쪽 요소를 제거할지, 오른쪽 요소를 제거할지를 결정할 수 있게 해두고, R 문자가 나오면 left 의 상태를 True와 False 사이에 왔다갔다 할 수 있게 해둠으로써 해결했다. (더 좋은 방법이 있으면 제안 부탁드립니다!)

코드

import sys
from collections import deque

n = int(sys.stdin.readline())
for _ in range(n):
    iserror = False  # 빈 배열에서 D 작업을 했을 때 error를 표기하게 하는 변수
    a = str(sys.stdin.readline())
    b = int(sys.stdin.readline())
    c = sys.stdin.readline()
    if b > 0:
        d = c[1:-2]
        p = list(map(str, d.split(',')))
        dq = deque(p)
    else:
        dq = deque([])
    left = True  # True일때 정배열, False일때 역배열
    for i in range(len(a)):
        if a[i] == 'R':  # 문자열에서 R 문자가 나올 시 left 변수를 toggle
            if left:
                left = False
            else:
                left = True
        if a[i] == 'D':  # 문자열에서 D 문자가 나올 시 left 상태에 따라 popleft와 pop을 결정
            if dq:
                if left:
                    dq.popleft()
                else:
                    dq.pop()
            else:
                iserror = True
    if iserror:
        print('error')
    else:
        if left:
            temp = list(dq)
        else:  # left가 False일 시, dq를 역배열
            temp = list(dq)[::-1]
        print('[' + ','.join(temp) + ']')

더 생각해 볼 것?

...

코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기