알고리즘/백준 문제풀이
[백준] 1406번 : 에디터 (python 파이썬)
매일_공부
2022. 3. 12. 15:10
반응형
https://www.acmicpc.net/problem/1406
문제 정리 : 초기에 입력 받는 문자열이 주어졌을 때, 커서는 맨 오른쪽에 위치,
M 번의 개수의 수행어를 입력 받고 수행어 수행.
수행이 끝나면 편집된 문자열 출력.
import sys
s = sys.stdin.readline().rstrip() # 문자열 입력
l = list(s) # 커서 기준 왼쪽에 있는 문자열
l1 = [] # 커서 기준 오른쪽에 있는 문자열
c = len(s)
n = int(sys.stdin.readline())
for i in range(n):
line = sys.stdin.readline().rstrip() # 수행어 입력
if line[0] == "L" and l !=[]: # L 일 경우 (왼쪽으로 갈 수 없으면 무시)
l1.append(l.pop()) # 왼쪽 pop 후 오른쪽에 append
elif line[0]== "P": # P 일 경우
l.append(line[2]) # 왼쪽에 숫자 입력
elif line[0] == "D"and l1 !=[]: # D 일 경우 (오른쪽으로 갈 수 없으면 무시)
l.append(l1.pop()) # 오른쪽 pop 후 왼쪽에 append
elif line[0] == "B"and l !=[]: # B 일 경우 (왼쪽을 지울 수 없으면 무시)
l.pop() # 왼쪽 지우기
print("".join(l+list(reversed(l1)))) # 정답 출력
처음에는 커서의 인덱수를 가지는 변수를 만들어 del과 insert를 사용했지만 시간초과.
따라서 del 대신에 pop, insert 대신에 append를 사용할 수 있게 하는 아이디어가 필요!
스택을 2개 만듬으로서 커서의 왼쪽과 오른쪽을 수행에 따라 요소를 옮김으로서 시간단축 가능하다.
반응형