본문 바로가기

algorithm

알고리즘 기초 1/2 200-자료구조: 에디터

에디터(python1406)

첫 풀이: cursor 변수를 활용하여 커서가 가르키고 있는 인덱스를 저장하여 문제를 해결

import sys

s = list(sys.stdin.readline())
N = int(sys.stdin.readline())
cursor = len(s)

for i in range(N):
    s_ = sys.stdin.readline().strip()

    if s_[0] == 'L':
        if cursor != 0:
            cursor = cursor - 1
        else: continue

    elif s_[0] == 'D':
        if cursor != len(s):
            cursor = cursor + 1
        else: continue

    elif s_[0] == 'B':
        if cursor != 0:
            del s[cursor - 1]
        else: continue

    elif s_[0] == 'P':
        s.insert(cursor, s_[1])
        cursor = cursor + 1

print("".join(s))

그러나 시간 초과가 발생함

정답 풀이: 왼쪽 스택과 오른쪽 스택을 나눠서 선언하여 왼쪽 스택에서 pop을 하는 방식으로 풀이

import sys

stack_l = list(sys.stdin.readline().strip())
stack_r = []
N = int(sys.stdin.readline())

for i in range(N):
    s_ = sys.stdin.readline().split()

    if s_[0] == 'L':
        if len(stack_l) != 0:
            stack_r.append(stack_l.pop())
        else: 
            continue

    elif s_[0] == 'D':
        if len(stack_r) != 0:
            stack_l.append(stack_r.pop())
        else: 
            continue

    elif s_[0] == 'B':
        if len(stack_l) != 0:
            stack_l.pop()
        else: 
            continue

    elif s_[0] == 'P':
        stack_l.append(s_[1])

answer = stack_l + stack_r[::-1]

print("".join(answer))