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 |