스택 기본 구조 활용
알고리즘: Stack
import sys
input = sys.stdin.readline
t = int(input())
for i in range(t):
tmp = input().rstrip()
pwd = [] # 비밀번호 배열
sub = [] # 커서 이동 시 담아놓을 배열
for a in tmp:
if a == '<': # 왼쪽 커서일 때
if pwd: # pwd가 존재할 경우에만
sub.append(pwd.pop()) # pop 후 sub 배열에 넣기
elif a == '>': # 오른쪽 커서일 때
if sub: # sub가 존재할 경우에만
pwd.append(sub.pop()) # pop 후 pwd 배열에 넣기
elif a == '-': # - 일 때
if pwd: # pwd가 존재할 경우에만
pwd.pop() # pwd pop하여 삭제
else:
pwd.append(a) # 위의 3가지 문자 외 어느 문자든 전부 pwd에 삽입
print("".join(pwd),"".join(sub[::-1]),sep="")
이번 문제는 사실 첨에 한글 이해하는 게 가장 어려웠다 ㅎㅂㅎ...
만약 커서의 위치가 줄의 마지막이 아니라면, 커서 및 커서 오른쪽에 있는 모든 문자는 오른쪽으로 한 칸 이동한다
이부분 보고 팍씌 뭔 말이야,,, 하며 인상 찌푸림..
나만 띨빡일 수 있지만, 혹시 또 이걸로 머리 싸매고 계실 분이 한 분이라도 더 있을 수 있으니..
굳이 설명을 하자면 걍 커서를 어느 위치로 이동하든,
즉, 왼쪽이든 오른쪽이든 커서를 이동하게 될 경우 그 커서 위치부터 새 문자를 쓰겠다 그 말이다
sub 배열은 먼저 입력 된 문자가 pwd배열에 문자가 있다 치고!
를 가능하게 해주는 배열이다
다시 말해, 커서 이동 후 커서가 어디에 있는 지 기억해주는 역할을 해주는 것이다
'<'의 경우에 pwd 배열에 값이 있어야만 유효한 문자이며,
pwd 배열의 길이가 커서가 왼쪽으로 이동할 수 있는 길이라고 볼 수 있다
'>'의 경우에는 그 뒤로 적을 문자들을 모아놓은 sub 배열에 값이 있어야만 유효한 문자이며,
sub 배열의 길이가 커서가 오른쪽으로 이동할 수 있는 길이이다
스택이 FIFO구조이다 보니 pwd <-> sub가 서로 주고받으며
결국 pwd 배열에는 입력 순서대로 문자가 들어갈 수 있게 된다