https://www.acmicpc.net/problem/5430
- 입력
테스트 케이스 개수 T
수행할 함수 이름 p
배열에 들어있는 수의 개수 n
배열에 들어있는 정수
- 출력
함수 수행 결과
에러 발생 시 error 출력
RDD의 경우 뒤집기, 제거, 제거를 수행해야 하는데 1,2,3,4로 예를 들면
4,3,2,1 → 3,2,1 → 2,1
R: 순서를 뒤집는다.
D: 첫 번째 수를 버린다. -> 배열이 비어있는데 실행되면 에러가 발생한다.
from collections import deque
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
fnc = input().rstrip()
m = int(input()) # 배열에 들어있는 개수
arr = deque(input().rstrip()[1:-1].split(',')) # 대괄호 빼고 넣기
for j in fnc:
if j == 'R':
arr.reverse()
elif j == 'D':
if arr: # arr가 true
arr.popleft()
else:
print('error')
break
print('['+','.join(arr)+']')
⇒ 마지막 예제에서 error가 안나온다. 0개가 들어갔을 때를 고려해야 한다.
또한, 비었을 때 출력하는 것을 방지하기 위해 flag를 지정해주었다.
from collections import deque
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
fnc = input().rstrip()
m = int(input()) # 배열에 들어있는 개수
arr = deque(input().rstrip()[1:-1].split(',')) # 대괄호 빼고 넣기
flag = 1
if m == 0:
arr = deque()
for j in fnc:
if j == 'R':
arr.reverse()
elif j == 'D':
if arr: # arr가 true
arr.popleft()
else:
print('error')
flag = 0
break
if flag == 1:
print('['+','.join(arr)+']')
→ 시간초과가 발생한다.
빼는 경우는 시간을 줄일 수 없을 것 같아
방법 1) D가 나오기 전 두번(짝수번) 뒤집을 경우 reverse를 수행하지 않도록 코드를 수정해준다.
방법 2) 짝수번이면 그대로이니까 reverse를 수행하지 않고 뒤에서 값을 뺀다.
→ 2번 방법이 코드 구현하는데 더 쉬울 것 같다.
from collections import deque
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
fnc = input().rstrip()
m = int(input()) # 배열에 들어있는 개수
arr = deque(input().rstrip()[1:-1].split(',')) # 대괄호 빼고 넣기
flag = 1
rev = 0
if m == 0:
arr = deque()
for j in fnc:
if j == 'R':
rev += 1
elif j == 'D':
if not arr:
print('error')
flag = 0
break
else: # arr가 true, 짝수/홀수 구분
if rev % 2 == 0:
arr.popleft()
else:
arr.pop()
if flag == 1:
if rev % 2 == 0:
print('['+','.join(arr)+']')
else:
arr.reverse()
print('['+','.join(arr)+']')