앞뒤로 추가하고 하는거 보니 deque쓰는게 나을듯
주의사항은 "P $"할 때, 커서의 왼쪽 =/= 큐의 맨왼쪽 주의해라
커서는 초기에 맨 오른쪽에 있는듯
arr = list(input())
end = int(input())
arr.insert(0,'0') # (중요) 맨 왼쪽 커서의 자리 추가
cusor = len(arr) # (중요) cursor는 index값이고, 초기에 맨 끝에 있어야함!!!
for _ in range(end):
print(*arr)
print("cusor = ", cusor)
comm = input()
if comm[0] == 'L' and cusor > 1: # 맨앞에 있으면 이동 불가
cusor -= 1
elif comm[0] == 'D' and cusor < end-1: # 맨 뒤에 있으면 이동 불가
cusor += 1
elif comm[0] == 'B':
if cusor - 1 <= 0:
continue
arr.pop(cusor-1)
cusor -= 1
elif comm[0] == 'P':
arr.insert(cusor, comm[2])
cusor += 1
print(''.join(arr[1:]))
리스트의 길이가 N일 때,
- list.pop(i)와 list.insert(i)의 시간복잡도는 O(N)이다
시간복잡도 O(1)로 줄이기 위해서
- list.pop()과 list.append(i)를 사용해야 한다.
arr = list(input())
end = int(input())
arr.insert(0,'0') # (중요) 맨 왼쪽 커서의 자리 추가
cusor = len(arr) # (중요) cursor는 index값이고, 초기에 맨 끝에 있어야함!!!
for _ in range(end):
comm = input()
if comm[0] == 'L' and cusor > 1: # 맨앞에 있으면 이동 불가
cusor -= 1
elif comm[0] == 'D' and cusor < end-1: # 맨 뒤에 있으면 이동 불가
cusor += 1
elif comm[0] == 'B':
if cusor - 1 <= 0:
continue
tmp_l = arr[:cusor]
tmp_r = arr[cusor:]
tmp_l.pop()
arr = tmp_l + tmp_r
cusor -= 1
elif comm[0] == 'P':
tmp_l = arr[:cusor]
tmp_r = arr[cusor:]
tmp_l.append(comm[2])
arr = tmp_l + tmp_r
cusor += 1
print(''.join(arr[1:]))
''' 블로그 아이디어 인용한 풀이 (스택 2개) '''
import sys
left = list(sys.stdin.readline().strip()) # .strip()를 해줘야한다.... 이거안하니까 계속 틀림
right = []
end = int(sys.stdin.readline())
for _ in range(end):
comm = sys.stdin.readline()
# 왼쪽 스택에 데이터 있으면 맨 끝 데이터를 오른쪽으로 이동
if comm[0] == 'L':
if left: right.append(left.pop())
# 오른쪽 스택에 데이터 있으면 맨 앞 데이터를 왼쪽으로 이동 (오른쪽은 거꾸로 생각!)
elif comm[0] == 'D':
if right: left.append(right.pop())
# 커서 왼쪽에 데이터 있으면 pop() = 데이터 삭제
elif comm[0] == 'B':
if left: left.pop()
# 커서 왼쪽에 데이터 추가 = 왼쪽 스택에 append()
elif comm[0] == 'P':
left.append(comm[2])
print(''.join(left+list(reversed(right))))