- 명령어별로 각각의 기능을 수행할 수 있는 코드를 작성했는데 시간초과가 나왔다. 질문게시판을 참고해보니
insert
를 사용하면 시간초과가 나온다고 했다. 다른 답변들을 보니 이 문제는 커서를 기준으로 왼쪽에 있는 문자열과 커서를 기준으로 오른쪽에 있는 문자열 즉, 두 개의 스택으로 나눠 문제를 해결해야 시간초과가 발생하지 않는다고 했다.
입력
abc
9
L
L
L
L
L
P x
L
B
P y
출력
yxabc
명령어 | cursor_left(커서 기준 왼쪽 스택) | cursor_right(커서 기준 오른쪽 스택) |
---|---|---|
X | abc | - |
L | ab | c |
L | a | cb |
L | - | cba |
L | - | cba |
L | - | cba |
P x | x | cba |
L | - | cbax |
B | - | cbax |
P y | y | cbax |
cursor_left
+ reversed(cursor_right)
import sys
input = sys.stdin.readline
cursor_left = list(input().strip())
cursor_right = []
N = int(input().strip())
for _ in range(N):
command = list(map(str, input().strip().split()))
if command[0] == "L":
if len(cursor_left) == 0:
continue
cursor_right.append(cursor_left.pop())
elif command[0] == "D":
if len(cursor_right) == 0:
continue
cursor_left.append(cursor_right.pop())
elif command[0] == "P":
cursor_left.append(command[1])
elif command[0] == "B":
if len(cursor_left) == 0:
continue
cursor_left.pop()
cursor_right = reversed(cursor_right)
cursor_left.extend(cursor_right)
print(''.join(cursor_left))