[Python][백준] 5397번 키로커

신남·2023년 1월 19일

https://www.acmicpc.net/problem/5397

공부 날짜 : 2023.01.19
정답 참조 여부 : x

문자 입력과 커서 이동, 삭제 등의 명령에 의해서 만들어진 문자열을 출력할 수 있는지 묻는 문제이다.


덱 구조를 사용하니까 금방 풀렸다.

커서를 기준으로 왼쪽과 오른쪽으로 구분하고, 커서 이동시 왼쪽이나 오른쪽에서 pop해서 append해주었다. 마찬가지로 지우는 경우에는 왼쪽에 pop해주고 입력은 왼쪽에 append해주면 된다.

덱 구조를 어떻게 구현하는지 궁금하긴 하지만, 이 부분은 당분간 깊게 생각하지 않고 자료구조 까지는 주어지는 모듈을 사용해야겠다.

소스코드

from collections import deque
import sys
input = sys.stdin.readline
##########################################
t = int(input())

for _ in range(t):
    left_deque = deque()
    right_deque = deque()

    password_data = input().rstrip()

    for char in password_data:
        if char == "<":
            if left_deque:
                right_deque.appendleft(left_deque.pop())
            else:
                continue

        elif char == ">":
            if right_deque:
                left_deque.append(right_deque.popleft())
            else:
                continue

        elif char == "-":
            if left_deque:
                left_deque.pop()
            else:
                continue

        else:
            left_deque.append(char)

    print("".join(left_deque) + "".join(right_deque))

0개의 댓글