
🔗 문제 링크
https://www.acmicpc.net/problem/5430
💻 코드
import sys
input = sys.stdin.readline
from collections import deque
# R: 뒤집기, D: 첫 수 버리기
# O(nlogn)까지
def solution(s,p):
global point
s = deque(s)
end = len(s)-1
cnt = 0
for i in p:
if i == 'R':
if cnt % 2 == 0:
cnt += 1
else:
point = 0
cnt -= 1
elif i == 'D' and not s:
print("error")
return
else: # D
if cnt % 2 == 0:
s.popleft()
else:
s.pop()
result = list(reversed(s)) if cnt % 2 != 0 else list(s)
print("["+",".join(map(str,result))+"]")
T = int(input())
for _ in range(T):
p = input().strip()
n = int(input())
li = eval(input())
solution(li,p)
🤷♂ 풀이
n==0일지라도 D 명령어가 없었다면 []를 출력함에 유의해야한다.
reverse하고 pop을 매번하는 것은 시간초과가 날 수 있기에 cnt라는 변수로 뒤집기 여부를 체크
cnt % 2 == 1일때 뒤집힌 상태
deque를 활용해 O(1)연산으로 pop(), popleft() 수행하고 최악의 경우 모든 원소를 다 건들게 되기에 O(n)이다.
eval(input())
: input()으로 받은 문자열을 파이썬 리스트로 변환print("["+",".join(map(str,result))+"]")
: 이 문제는 출력에 공백이 없음에도 주의해야한다.결과 리스트의 요소들을 문자열로 변환해 ",".join으로 모두 이어붙인다.