밑의 코드는 이 문제를 보고 처음 문제를 푼 코드다.
cursor라는 변수를 만들어서 커서의 위치를 나타내도록 했다.
그걸 사용하기 위해서 pop(), insert()를 사용했다.
시간초과가 계속 나와서 구글링 해보니 시간복잡도의 문제였다.
시간 복잡도: O(1)보다 O(N)이 더 복잡함.
append(): O(1)
pop(): O(1)
insert(): O(N)
이러한 문제로 append()와 pop()을 사용하기 위해서 stack을 왼쪽 stack, 오른쪽 stack 두개 만들었다.
import sys
text = list(input())
n = int(input())
cursor = len(text)
for i in range(n):
command = sys.stdin.readline().split()
if command[0] == "L" and cursor > 0:
cursor -= 1
elif command[0] == "D" and cursor < len(text):
cursor += 1
elif command[0] == "B" and cursor > 0:
text.pop(cursor-1)
cursor -= 1
elif command[0] == "P":
text.insert(cursor, command[1])
cursor += 1
for i in range(len(text)):
print(text[i], end="")
import sys
stack_l = list(input())
stack_r = []
n = int(input())
for i in range(n):
command = sys.stdin.readline().split()
if command[0] == "L" and stack_l:
stack_r.append(stack_l.pop())
elif command[0] == "D" and stack_r:
stack_l.append(stack_r.pop())
elif command[0] == "B" and stack_l:
stack_l.pop()
elif command[0] == "P":
stack_l.append(command[1])
print("".join(stack_l + list(reversed(stack_r))))
import sys
stack_l = list(input())
stack_r = []
n = int(input())
for i in range(n):
command = sys.stdin.readline().split()
if command[0] == "L" and stack_l:
stack_r.append(stack_l.pop())
elif command[0] == "D" and stack_r:
stack_l.append(stack_r.pop())
elif command[0] == "B" and stack_l:
stack_l.pop()
elif command[0] == "P":
stack_l.append(command[1])
print("".join(stack_l + list(reversed(stack_r))))
입력값:
abc
9
L
L
L
L
L
P x
L
B
P y
시작 값
stack_l = [a, b, c]
stack_r = []
L 입력
stack_l = [a, b]
stack_r = [c]
L 입력
stack_l = [a]
stack_r = [c, b]
L 입력
stack_l = []
stack_r = [c, b, a]
L 입력
stack_l의 값이 없어서 조건 불충족
L 입력
stack_l의 값이 없어서 조건 불충족
P x 입력
stack_l = [x]
stack_r = [c, b, a]
L 입력
stack_l = []
stack_r = [c, b, a, x]
B 입력
stack_l의 값이 없어서 조건 불충족
P y 입력
stack_l = [y]
stack_r = [c, b, a, x]
출력 (stack_l + list(reversed(stack_r)))
[y, x, a, b, c]