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))