폴더 분리

This commit is contained in:
2026-02-23 11:14:50 +09:00
parent 4aebd20cf5
commit 0e8e68d12f
45 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
# 에디터
import sys
from collections import deque
input = sys.stdin.readline
def l(left_q, right_q):
if len(left_q) >= 1:
right_q.appendleft(left_q.pop())
return
def d(left_q, right_q):
if len(right_q) >= 1:
left_q.append(right_q.popleft())
return
def b(left_q):
if len(left_q) >= 1:
left_q.pop()
return
def p(left_q, w):
left_q.append(w)
return
COMMANDS = {
"L": l,
"D": d,
"B": b,
"P": p,
}
def excute(left_q, right_q, *c):
command = COMMANDS.get(c[0], None)
if c[0] == "P":
command(left_q, c[1])
elif c[0] == "L" or c[0] == "D":
command(left_q, right_q)
elif c[0] == "B":
command(left_q)
else:
return
return
def solution():
s = input().rstrip()
m = int(input().rstrip())
left_q = deque(list(s))
right_q = deque([])
for _ in range(m):
excute(left_q, right_q, *(input().rstrip().split()))
result = list(left_q) + list(right_q)
print("".join(result))
return
solution()
"""
걸린 시간: 30분
시간 복잡도: deque는 pop이나 append가 어디든 O(1)이므로 명령어 수행은 항상 O(1)이고, m번 명령을 반복하기 때문에 O(m)이다.
그 후 마지막에 두 deque를 합쳐서 출력하기 때문에 n개의 단어에서 m만큼 글자가 추가 되었다면 O(n+m)이다.
따라서 전체 시간복잡도는 O(n+m)이다.
해설: 커서를 기준으로 양쪽에 deque를 배치한 후 l, d로 커서를 움직이면 양쪽 deque에서 요소들을 옮기고, b, p로 요소를 지우거나 추가하면
커서 기준 왼쪽으로 동작한다고 했으므로 왼쪽 deque로 요소를 조정한다. 마지막에 두 deque를 list로 만들어서 합치고 출력하면 끝
확장성을 위해 dispatch 전략을 사용했지만 l,d,b,p의 인자가 달라서 excute 함수에서 또 분기를 했다. -> l,d,b,p의 인자를 같게 하면 됨
자료구조가 deque에서 다른 것으로 바뀐다면 다 수정해야 하기 때문에 결합도가 너무 높다.
-> 추상화 계층 하나를 추가해서 Editor라는 클래스를 만들고 거기다가 기능들 쓴 다음에 l,d,b,p가 그걸 받아오면 나중에 Editor 클래스만 바꾸면 됨
"""