알고리즘/백준 문제풀이

[백준] 1406번 : 에디터 (python 파이썬)

매일_공부 2022. 3. 12. 15:10
반응형

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개 만듬으로서 커서의 왼쪽과 오른쪽을 수행에 따라 요소를 옮김으로서 시간단축 가능하다.

반응형