b_에디터_1406

source www.acmicpc.net/problem/1406
type 📌 개발노트
topics 600-알고리즘 & 코딩테스트 601 구현 & 완전탐색
types 문제풀이
정답여부 실수

문제

커서 앞 뒤 중간. n+1 공간에 위치해있음
L : 커서 왼쪽으로
D : 커서 오른쪽으로
B : 커서 왼쪽에 있는 문자를 삭제
P: $문자를 왼쪽에 추가
초기에 커서는 맨앞에

시간초과 에러가 떳다..
걍 배열을 두고 중간에 값을 insert하고 삭제하는 식으로 구현을 했다. << 둘다 시간 복잡도 O(n)이 걸린다.

커서기준으로 left right queue로 나눠야함.

before

import sys

words = list(sys.stdin.readline().strip())
# <span id="기본적으로-문자의-index와-커서가-같으면"></span>기본적으로 문자의 index와 커서가 같으면
# <span id="해당-문자-앞에있는-것-마지막커서는-문자의-길이임"></span>해당 문자 앞에있는 것. 마지막커서는 문자의 길이임
words_len = len(words)
now_cur = words_len
def editor(arr,com):
    global now_cur
    if com[0] == 'L':
        if now_cur > 0:
            now_cur -= 1
    elif com[0] == 'D':
        if now_cur < words_len:
            now_cur += 1
    elif com[0] == 'B':
        if now_cur > 0:
            del arr[now_cur-1:now_cur]
            now_cur -= 1
    else:
        _ , v=com.split()
        arr[now_cur:now_cur] = [v]
        now_cur += 1

k = int(sys.stdin.readline().strip())
input = []
for _ in range(k):
    input.append(sys.stdin.readline().strip())
    
for i in input:
    editor(words,i)

print("".join(words))

correct answer

import sys
from collections import deque
words = list(sys.stdin.readline().strip())
left = deque(words)
right = deque([])
# <span id="기본적으로-문자의-index와-커서가-같으면"></span>기본적으로 문자의 index와 커서가 같으면
# <span id="해당-문자-앞에있는-것-마지막커서는-문자의-길이임"></span>해당 문자 앞에있는 것. 마지막커서는 문자의 길이임

def editor(com):
    global now_cur
    if com[0] == 'L':
        if left:
            right.appendleft(left.pop())
    elif com[0] == 'D':
        if right:
            left.append(right.popleft())
    elif com[0] == 'B':
        if left:
            left.pop()
    else:
        _ , v=com.split()
        left.append(v)

k = int(sys.stdin.readline().strip())
input = []
for _ in range(k):
    input.append(sys.stdin.readline().strip())
    
for i in input:
    editor(i)

print("".join(left+right))