[ BOJ / Python ] 1406번 에디터

황승환·2022년 7월 1일
0

Python

목록 보기
338/498
post-thumbnail


이번 문제는 두개의 스택을 사용하여 해결하였다. 처음에는 단순하게 해당 명령이 입력되면 커서 변수와 문자열을 편집해가는 방식으로 구현하였다. 정답은 잘 도출되었지만, 시간초과가 발생하였다. 다른 방식을 생각해보았고, 다음과 같은 방식을 생각하였다.

  • 초기 문자열 s를 스택으로 구현하고, 임시 스택 tmp를 만든다.
    (s는 현재 커서보다 왼쪽에 있는 문자들을 담게되고, tmp는 현재 커서보다 오른쪽에 있는 문자들을 담게 된다.)
  • L이 입력되면 s를 pop하여 tmp에 넣는다.
  • D가 입력되면 tmp를 pop하여 s에 넣는다.
  • B가 입력되면 s를 pop한다.
  • P가 입력되면 s에 문자를 넣는다.
  • 모든 과정이 끝나면 tmp가 없어질 때까지 pop하며 s에 넣는다.

Code

s = list(str(input()))
m = int(input())
tmp = []
def editor(com):
    if com[0] == 'L':
        if s:
            tmp.append(s.pop())
    elif com[0] == 'D':
        if tmp:
            s.append(tmp.pop())
    elif com[0] == 'B':
        if s:
            s.pop()
    elif com[0] == 'P':
        s.append(com[1])
for _ in range(m):
    com = list(map(str, input().split()))
    editor(com)
for i in range(len(tmp)):
    s.append(tmp.pop())
print(''.join(s))

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글