https://www.acmicpc.net/problem/5430

시간 초과 문제.
처음에 구현 -> 시간 초과 -> 리스트를 deque 로 변경 -> 시간 초과 -> reverse 를 너무 많이 해서 그럼
그리고 틀린 답
from collections import deque
def RD():
reversed_count = 0
for i in rd_func:
if len(data) == 0:
print('error')
return
if i == 'R':
reversed_count += 1
if i == 'D':
if reversed_count % 2 == 1:
data.pop()
else:
data.popleft()
if reversed_count % 2 == 1:
data.reverse()
print(str(data).replace(' ', '').replace('deque(','').replace(')', ''))
t = int(input())
for i in range(t):
rd_func = list(map(str, input().strip()))
n = int(input())
data = input().replace('[','').replace(']','').replace(',', ' ')
data = deque(map(int, data.split()))
RD()
예외가 되는 경우의 수는 찾지 못했지만...
뒤집힌 상태에서 D 명령어가 실행되는 경우를 제대로 처리하지 못할 수 있다는데...
이해는 되지 않는다... 뭘까..?
그리고 정답...
from collections import deque
def RD():
reversed_count = 0
for i in rd_func:
if i == 'R':
reversed_count += 1
elif i == 'D':
if len(data) == 0:
print('error')
return
if reversed_count % 2 == 0:
data.popleft() # 정방향일 때 왼쪽에서 제거
else:
data.pop() # 반대방향일 때 오른쪽에서 제거
if reversed_count % 2 == 1:
data.reverse() # 최종적으로 뒤집혀야 할 경우에만 한번 뒤집기
print(str(data).replace(' ', '').replace('deque(','').replace(')', ''))
t = int(input())
for i in range(t):
rd_func = list(map(str, input().strip()))
n = int(input())
data = input().replace('[','').replace(']','').replace(',', ' ')
data = deque(map(int, data.split()))
RD()
if len(data) == 0을 왜 if i == 'D'에 넣어야할까? 나는 아직도 모르겠다.
내가 놓친 세 개
1. pop 을 할 때 deque 가 더 효율적이다.
2. R을 짝수 번 했을 때는 reverse 안되게, 홀수 번 했을 때는 reverse 되게 바꾸자.
3. if len(data) == 0 을 D 아래에 위치시키자(?)