https://www.acmicpc.net/problem/5430
공부 날짜 : 2023.01.25
정답 참조 여부 : X
숫자 리스트에서 반전시키거나 하나씩 뺄 수 있을 때, 명령에따라 반전시키고 뺀후의 결과를 출력하는 문제이다.
문제 자체는 쉬웠다.
숫자리스트를 덱으로 구현했고 반전되면 왼쪽에서 빼고 반전이 안되있으면 오른쪽에서 빼주면 되었다.
하지만 입력형태가 기존처럼 공백으로 구분되지 않아서 많이 어려웠다.
이번에 배운 내용을 정리하면
str.strip("[]\n")
# >>> argument로 입력된 문자열 각각을 모두 제거함
print("".split(sep = ","))
# >>> ['']
# >>> sep이 주어질 때 빈 문자열에 적용하면 빈 문자열이 출력됨
밑의 경우가 좀 어려웠다
data = deque(input().strip("[]\n").split(sep=",")) # []
# >>> ['']
이렇게 되었는데 내가 원한건 빈 리스트 []였다.
공식문서를 봤을 때 빈 값을 split()시키면 빈 문자열을 반환한다고 나오길래
if data[0] == "":
data = deque()
로 처리해줬는데 썩 마음에드는 해결법은 아니였다.
추후 배운 내용에서
data = deque(input().strip("[]\n").replace(",", " ").split())
로 하는 방법이 있었다.
문자열 다루는 매서드에 대해서 좀더 이해해야겠다고 느낀 문제였다.
from collections import deque
import sys
input = sys.stdin.readline
###########################################
t = int(input())
for _ in range(t):
p = input().rstrip()
n = int(input())
data = deque(input().strip("[]\n").split(sep=","))
if data[0] == "":
data = deque()
# 리스트가 역전시켰는지 판단하는 변수
check_reverse = False
# 에러가 나서 끝났는지 판단하는 변수
check_stop = False
# 명령을 하나씩 수행
for order in p:
# R이면 리버스 변수만 바꾸고 다음 명령
if order == "R":
check_reverse = not check_reverse
continue
# 여기서 부터 D명령만 수행
# 길이가 0이면 에러 출력후 에러발생켜고 명령수행 멈춤
if len(data) == 0:
print("error")
check_stop = True
break
if check_reverse:
data.pop()
else:
data.popleft()
# 에러가 나서 멈췄으면 다음 테스트 케이스
if check_stop:
continue
# 괄호 열고
answer = "["
# 리버스 상태에 따라서 값 추가
if check_reverse:
data.reverse()
answer += ",".join(data)
else:
answer += ",".join(data)
answer += "]"
print(answer)