알고리즘/백준 문제풀이
[백준] 5430번 : AC (python 파이썬)
매일_공부
2022. 6. 4. 12:12
반응형
https://www.acmicpc.net/problem/5430
from collections import deque
import sys
t = int(sys.stdin.readline().rstrip())
for _ in range(t):
s = sys.stdin.readline().rstrip()
n = int(sys.stdin.readline().rstrip())
l = sys.stdin.readline().rstrip()
if l != "[]":
l = list(map(int , l[1:-1].split(",")))
else:
l = []
l = deque(l)
r = False # 초기 r 값은 false
c =0
for i in s:
if i == "R": # (R인경우) r이 false면 true로, true면 false로 바꾸기
if r == False:
r = True
else:
r = False
else: # (D인경우) r이 false면 왼쪽에서 pop, true면 오른쪽에서 pop
if r == False:
try:
l.popleft()
except:
print("error")
c = 1
break
else:
try:
l.pop()
except:
print("error")
c = 1
break
# 마지막 출력층
if c == 0:
if r == False: # false면 그대로 출력
l = str(list(l))
l = l.replace(" ","")
print(l)
else: # true면 거꾸로 출력
l = str(list(l)[::-1])
l = l.replace(" ","")
print(l)
deque를 사용한다. R(뒤집기) 가 나올 때마다 배열을 모두 뒤집는 과정을 수행한다면 시간이 정말 많이 걸릴 것이다.
따라서 왼쪽과 오른쪽에서 모두 pop을 수행할 수 있는 deque를 이용하여 뒤집는 과정을 생략한다.
r(reversed) 이라는 변수를 만들어 실제로 뒤집지 않고도 뒤집음을 반영할 수 있다.
R이 나올 때마다 r의 boolean값을 바꾼 후 D(버리기)가 나올 때 마다 boolean값을 체크한 후 그에 맞는 방향에서 삭제한다.
또한 중간에 error인 경우가 발생하면 더 이상 for문을 돌릴 필요가 없기 때문에 c라는 변수로 error인 경우를 체크한다.
따라서 c == 1(error인 경우) break문으로 for문을 탈출하여 시간을 줄인다.
반응형