본문 바로가기
알고리즘/문제

[Python][백준 1406] 에디터.

by 윤팍 2021. 9. 19.

https://www.acmicpc.net/problem/1406

 

1406번: 에디터

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수

www.acmicpc.net

- 처음 이문제를 접했을 때 list로 접근하여 문자 사이에 값을 넣는 방법으로 풀려고 했으나 그럴경우 시간이 초과되어 다른 방법으로 해결하였습니다.

deque 2개를 사용하여 커서 기준으로 왼쪽 과 오른쪽으로 구분하여 풀었습니다.

 

소스코드

import sys
from collections import deque

N = sys.stdin.readline().strip()
M = int(sys.stdin.readline().strip())

left = deque(N) # 커서기준으로 왼쪽
right = deque() # 커서기준으로 오른쪽

for _ in range(M) :
    order = sys.stdin.readline().strip().split(' ')
    orderstr = order[0]

    if orderstr == 'L' :
        if len(left) != 0 :
            right.appendleft(left.pop()) # 커서가 왼쪽으로 이동하기 때문에 left dq 마지막 값을 right dq에 appendleft 함
    elif orderstr == 'D' :
        if len(right) != 0 :
            left.append(right.popleft()) # 커서가 오른쪽으로 이동하기 때문에 right 첫번째 값을 left dq에 append 함
    elif orderstr == 'B' :
        if len(left) != 0 :
            left.pop()
    elif orderstr == 'P' :
        val = order[1]
        left.append(val)

sys.stdout.write(''.join(left+right))

 

풀이

  • 커서를 기준으로 왼쪽(left deque) 와 오른쪽(right deque)를 선언해줍니다. 문제에서 첫 커서는 맨 끝에 있음으로 left deque에 문자열을 넣어줍니다.
  • L일 경우, 커서가 왼쪽으로 감으로써 left deque에 마지막 문자를 right deque에 첫번째로 appendleft 
  • R일 경우, 커서가 오른쪽으로 감으로써 right deque 첫번째 문자를 left deque에 append 
  • B일 경우, 커서 왼쪽 문자가 삭제 됨으로써 left deque 값을 pop
  • P일 경우, 커서 왼쪽에 추가 됨으로 left deque에 값을 append
  • 마지막으로 left deque 와 right deque를 합치고 출력

'알고리즘 > 문제' 카테고리의 다른 글

[백준][Python][5430] AC  (0) 2021.11.13
[Baekjoon][Python][10989] 수 정렬하기3  (0) 2021.09.16
[백준][Python] 2751번. 수 정렬하기 2  (0) 2021.09.12