본문 바로가기
백준 알고리즘/Python

[백준] 1406. 에디터 - Python

by 리버🐦‍🔥 2023. 9. 26.

[Silver II]

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

 

1406번: 에디터

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수

www.acmicpc.net

풀이

원래는 Linked List를 사용하여 문제를 해결하는 방법이 정석 풀이지만, Python에서 Linked List를 구현하는 것이

클래스를 선언하고...등과 같은 절차로 귀찮은 관계로, 스택(덱 사용) 2개를 사용하여 문제를 해결하였다.

왼쪽 스택과 오른쪽 스택이 있다고 가정하고, 왼쪽 스택의 top이 현재 커서의 위치가 된다.

Apple이라는 글자가 있는데 커서가 l뒤에 있다면 ['A', 'P', 'p', 'l'] / ['e']와 같이 스택이 존재하게 된다.

항상 왼쪽 top에 커서가 위치한다 가정하고, 양쪽 스택의 pop, push를 통해 커서를 이동시킨다.

from collections import deque
import sys

# global var
n = 0
leftStack = deque()
rightStack = deque()

# main
leftStack = deque(list(sys.stdin.readline().rstrip()))
n = int(sys.stdin.readline())

for i in range(n):
    command = list(sys.stdin.readline().rstrip().split())
    if command[0] == 'L':
        if leftStack:
            rightStack.appendleft(leftStack.pop())
    elif command[0] == 'D':
        if rightStack:
            leftStack.append(rightStack.popleft())
    elif command[0] == 'B':
        if leftStack:
            leftStack.pop()
    elif command[0] == 'P':
        leftStack.append(command[1])

for chr in leftStack:
    print(chr, end='')

for chr in rightStack:
    print(chr, end='')