sm 기술 블로그
163. 5430(AC) - 파이썬 본문
from collections import deque
import sys
input = sys.stdin.readline
T = int(input())
for _ in range(T):
p = list(input().rstrip())
n = int(input())
x = input()
x = x.replace("[", "")
x = x.replace("]", "")
x = x.replace(",", " ")
queue = deque(list(x.split()))
R_cnt = 0
error = False
for val in p:
if val == 'R':
R_cnt += 1
continue
if val == 'D' and len(queue) == 0:
error = True
break
else:
if R_cnt % 2 == 0:
queue.popleft()
else:
queue.pop()
if error:
print("error")
else:
if R_cnt % 2 == 1:
queue.reverse()
print("[" + ",".join(list(queue)) + "]")
문제요약
R은 뒤집기 D는 앞의 자리수 제거 를 진행해라. 만약 D를 했을 때 큐 내에 값이 없다면 "error"를 출력해라.
설명
문제는 크게 어렵지 않으나 트릭이 숨어 있다.
1. 정직하게 R일때 바로바로 뒤집으면 시간 초과가 발생한다.
2. x가 비어있을 때 []를 출력해야한다.
이 두가지를 지키면 크게 어렵지 않다.
p = list(input().rstrip())
n = int(input())
x = input()
x = x.replace("[", "")
x = x.replace("]", "")
x = x.replace(",", " ")
queue = deque(list(x.split()))
R_cnt = 0
error = False
입력값들을 처리해 주었다.
x는 [1,3,4]와 같은 형식으로 들어오기때문에 사전 작업이 필요하다.
if val == 'R':
R_cnt += 1
continue
R인 경우 바로바로 뒤집지 않고 먼저 카운터를 증가시킨다.
나중에 한번에 처리할 것이다.
if val == 'D' and len(queue) == 0:
error = True
break
D이고 큐 내에 값이 없다면 에러대상이다.
else:
if R_cnt % 2 == 0:
queue.popleft()
else:
queue.pop()
에러 대상이 아니라면 D를 수행할 수 있다는것 따라서 D를 수행하는데 수행하기 앞서 먼저 조건문으로 처리를 해보자.
만약, R_cnt 를 2로 나눈 나머지가 0이라면 뒤집지 않았다는 것이므로 맨 처음 값을 바로 빼준다.
2로 나누어 지지 않으면 뒤집어야 한다는 소리이므로 뒤집어 지면 맨뒤가 처음으로 빠지므로 맨 뒤에 있는 값을 빼준다.
if error:
print("error")
else:
if R_cnt % 2 == 1:
queue.reverse()
print("[" + ",".join(list(queue)) + "]")
우리는 값이 없다면, []를 출력해야 하기 때문에 에러를 먼저 조건문으로 처리해준다.
에러가 아니라면 값을 처리해주는데,
여기서 뒤집기를 진행한다.
'문제 > 백준_파이썬' 카테고리의 다른 글
165. 1992(쿼드트리) - 파이썬 (0) | 2022.07.30 |
---|---|
164. 2630 (색종이 만들기) - 파이썬 (0) | 2022.07.30 |
162. 1021(회전하는 큐) - 파이썬 (0) | 2022.07.27 |
161. 10866(덱) - 파이썬 (0) | 2022.07.27 |
160. 1966(프린트 큐) - 파이썬 (0) | 2022.07.26 |
Comments