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 |