[백준] 1406번 에디터 ★

거북이·2023년 1월 26일
0

백준[실버2]

목록 보기
19/81
post-thumbnail

💡문제접근

  • 명령어별로 각각의 기능을 수행할 수 있는 코드를 작성했는데 시간초과가 나왔다. 질문게시판을 참고해보니 insert를 사용하면 시간초과가 나온다고 했다. 다른 답변들을 보니 이 문제는 커서를 기준으로 왼쪽에 있는 문자열과 커서를 기준으로 오른쪽에 있는 문자열 즉, 두 개의 스택으로 나눠 문제를 해결해야 시간초과가 발생하지 않는다고 했다.

💡테스트케이스

입력

abc
9
L
L
L
L
L
P x
L
B
P y

출력

yxabc

💡변화 과정 설명

명령어cursor_left(커서 기준 왼쪽 스택)cursor_right(커서 기준 오른쪽 스택)
Xabc-
Labc
Lacb
L-cba
L-cba
L-cba
P xxcba
L-cbax
B-cbax
P yycbax
  • 결과 : cursor_left + reversed(cursor_right)

💡코드(메모리 : 36808KB, 시간 : 476ms)

import sys
input = sys.stdin.readline

cursor_left = list(input().strip())
cursor_right = []
N = int(input().strip())
for _ in range(N):
    command = list(map(str, input().strip().split()))
    if command[0] == "L":
        if len(cursor_left) == 0:
            continue
        cursor_right.append(cursor_left.pop())
    elif command[0] == "D":
        if len(cursor_right) == 0:
            continue
        cursor_left.append(cursor_right.pop())
    elif command[0] == "P":
        cursor_left.append(command[1])
    elif command[0] == "B":
        if len(cursor_left) == 0:
            continue
        cursor_left.pop()

cursor_right = reversed(cursor_right)
cursor_left.extend(cursor_right)
print(''.join(cursor_left))

💡소요시간 : 1h

0개의 댓글