from collections import deque
import sys
n = int(sys.stdin.readline())
for i in range(n):
command = sys.stdin.readline().strip() # 명령어
length = int(sys.stdin.readline())
if length == 0:
input()
deque_ = deque([])
else:
# 대괄호는 빼고 입력 받기
deque_ = deque( sys.stdin.readline()[1:-2].strip().split(','))
#print(deque_)
flag = 1 # 뒤집기 체크
flag2 = 1 # 에러 체크
for i in range(len(command)):
if command[i] == 'R':
flag = flag * -1
else: # D인 경우
if length == 0:
flag2 = flag2 * -1
break
if flag == -1:
deque_.pop()
length = length -1 # len()함수 대신 length 변수로 시간 절약
else:
deque_.popleft()
length = length -1
if flag2 == -1:
print("error")
else:
deque_ = deque(list(deque_))
if flag == -1:
deque_.reverse()
print("[", end="")
print(",".join(deque_), end="")
print("]")
코드 설명
반복되는 테스트 케이스의 수를 입력 받는다.(n) n번 동안 반복문을 수행한다.
먼저 배열에 들어있는 수의 개수를 입력 받는데, 그 수가 0 이라면 빈 배열 0이 아니라면 문자열에서 []를 빼고 입력 받고 ',' 문자를 기준으로 숫자만을 분리시켜 저장한다.
R과 D 명령을 위한 flag 1, 2 변수도 선언하여 준다. 만약 R(뒤집기) 명령일 경우 배열을 전부 뒤집는 대신 flag1 를 -1 로 설정하여 준다.
D 명령일 경우 길이가 0 이라면 에러 체크를 위해 flag2 역시 -1로 설정하여 준다. 만약 flag1 == -1 즉 배열을 한번 뒤집은 상태라면 뒤에서 부터 원소를 제거하여 준다, 그렇지 않다면 앞에서 부터 원소를 제거한다.
그 후 flag2 값 체크를 통해 에러가 발생했다면 error 메시지를 출력하고 그렇지 않다면 덱을 리스트로 바꾸어 준 후 flag1 == -1 상태라면 배열을 뒤집어 준다. 형식에 맞게 출력한다.
Point : R 명령의 경우 실제로 배열을 reverse 해주면 시간이 매우 오래 걸리게 된다. 그 대신 flag1 변수를 통해 배열이 뒤집어진 상태인지를 체크해주는 방식으로 시간을 절약할 수 있다. 이 값이 양수라면 그대로의 형태 음수라면 뒤집어진 형태이다. 따라서 D 연산을 pop() 할 때 앞에서 할지 뒤에서 할지에 대한 결정을 해줄 수 있다.
또한, 에러가 발생한 경우 역시 체크를 하기 위해 flag2 변수도 이용하여 준다.
마지막 출력을 편하게 하기 위해 덱 구조를 list 로 바꾸어 준 후 형식에 맞게 출력한다.
'SW개발 > 코딩테스트' 카테고리의 다른 글
[백준]11047번 동전0 - 그리디 (0) | 2021.01.27 |
---|---|
[백준]2839번 설탕 배달 - 그리디 (0) | 2021.01.26 |
[백준]1021번 회전하는 큐 - 덱 (0) | 2021.01.24 |
[백준]10866번 덱 - 덱 (0) | 2021.01.23 |
[백준]1966번 프린터 큐 - 큐 (0) | 2021.01.18 |