반응형
코드
import sys
from collections import deque
T = int(input())
for i in range(T):
err = 0
rev = 0
p = list(sys.stdin.readline().strip())
n = int(sys.stdin.readline())
arr = deque(sys.stdin.readline().strip()[1:-1].split(','))
for j in p:
if j == 'R':
if rev == 0:
rev = 1
elif rev == 1:
rev = 0
elif j == 'D':
if len(arr) == 0 or n ==0:
err = 1
print("error")
break
else:
if rev == 0:
arr.popleft()
elif rev == 1:
arr.pop()
if err == 0:
if rev == 1:
arr.reverse()
print('['+','.join(arr)+']')
설명
[]를 입력받아도 deque의 길이는 1이기 때문에 n이 0일 때 error를 출력하는 조건문을 따로 만들어줘야 한다. deque에 아무것도 들어있지 않을 때 R이 들어오면 에러가 발생하지 않지만 D가 들어오면 에러가 발생한다.
처음에는 시간초과 오류가 떴다. R을 입력받을 때마다 reverse를 해줬는데, arr.reverse()는 배열의 크기만큼 시간이 들기 때문에 R이 많은 케이스가 나올 경우 시간초과가 뜨게 된다. 따라서 rev 변수를 만들어서 처음 나왔을 때는 1로 바꿔주고 만약 이미 1이었으면 0으로 바꿔준다. rev가 1이면 reverse를 해줘야 하는데 아직 해주지 않은 것이므로 pop을 할 때는 deque의 가장 마지막에 있는 값을 빼줘야 된다. 마지막에 rev 값이 1이면 reverse를 해주었고 0이면 그냥 유지시켜줬다.
반응형
'알고리즘 > 자료구조' 카테고리의 다른 글
[백준][Python] 11279번 최대 힙 (0) | 2022.02.17 |
---|---|
[백준][Python] 1918번 후위 표기식 (0) | 2022.02.17 |
[백준][Python] 18115번 카드 놓기 (0) | 2022.02.16 |
[백준][Python] 5397번 키로거 (0) | 2022.02.15 |
[백준][Python] 1021번 회전하는 큐 (0) | 2022.02.15 |
댓글