반응형
https://www.acmicpc.net/problem/1406
1406번: 에디터
첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수
www.acmicpc.net
문제 정리 : 초기에 입력 받는 문자열이 주어졌을 때, 커서는 맨 오른쪽에 위치,
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개 만듬으로서 커서의 왼쪽과 오른쪽을 수행에 따라 요소를 옮김으로서 시간단축 가능하다.
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준] 17298번 : 오큰수 (python 파이썬) (0) | 2022.03.16 |
---|---|
[백준] 1158번 : 요세푸스 문제 (python 파이썬) (0) | 2022.03.12 |
[백준] 1929번 : 소수 구하기 (python 파이썬) [에라토스테네스의 체] (1) | 2022.03.10 |
[백준] 11286번 : 절대값 힙 (python 파이썬) (0) | 2022.03.10 |
[백준] 1927번 : 최소힙 (python 파이썬) (0) | 2022.03.10 |