Data Structure/Stack

[백준 1406번] 에디터

킹우현 2023. 10. 18. 18:46

 

1406번: 에디터

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

www.acmicpc.net

import sys

input = sys.stdin.readline

string = list(input().rstrip())

m = int(input().rstrip())

command_list = [tuple(input().rstrip().split()) for _ in range(m)]

stack = []

for command in command_list:
    if len(command) == 1: # L / D / B인 경우
        if command[0] == 'L' and string: # L인 경우
            stack.append(string.pop())
        elif command[0] == 'D' and stack:
            string.append(stack.pop())
        elif command[0] == 'B' and string:
            string.pop()
    else: # P $ 인 경우
        string.append(command[1])

while stack:
    string.append(stack.pop())

print("".join(string))

이번 문제는 커서를 왼쪽 오른쪽으로 움직일 수 있고, 커서 왼쪽에 있는 문자를 지우거나 문자를 추가할 수 있다고 했을 때 최종적으로 남게되는 문자열을 구하는 문제이다.

 

커서를 왼쪽으로 옮길 때마다 Stack에 추가해주고, 다시 커서를 오른쪽으로 옮기거나 모든 처리가 완료되고 난 후에는 원소를 pop해주는 방식으로 풀이할 수 있었다.

 

다만, 이 문제에서 배운 가장 중요한 것은 입력하는 값이 많은 경우에는 input 대신 'sys.stdin.readline'을 사용해야 시간초과가 발생하지 않고, sys.stdin.readline은 개행문자를 자동으로 삭제해주지 않기 때문에 'rstrip()'을 사용해서 처리해줘야 한다는 것을 배울 수 있었다. (앞으로는 무조건 readline, rstrip을 사용해서 시간초과를 방지할 것이다)⭐️

'Data Structure > Stack' 카테고리의 다른 글

[백준 9935번] 문자열 폭발  (0) 2023.10.18
[백준 2812번] 크게 만들기  (0) 2023.10.18
[백준 2504번] 괄호의 값  (1) 2023.10.18
[백준 10799번] 쇠막대기  (1) 2023.10.18
[백준 4949번] 균형잡힌 세상  (0) 2023.10.18