티스토리 뷰

반응형

문제

 

1406번: 에디터

문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는

www.acmicpc.net

 

풀이

처음에 생각한 방법은 쭈르륵 배열에 넣고 커서의 위치를 인트형 인덱스로 따로 관리하는것.

근데 시간제한이 엄청 빡빡한 문제였다.

 

따라서 왼쪽, 오른쪽 스택 두개를 만들어서 사용하고 그 사이를 커서의 위치로 생각하고 풀었다.

 

 

첫번째 시도

lstack = []
rstack = []

init = input()
for each in init:
    lstack.append(each)

N = int(input())

for _ in range(N):
    cmd = input()
    if cmd == 'L':
        if lstack:
            rstack.append(lstack.pop())
    elif cmd == 'D': 
        if rstack:
            lstack.append(rstack.pop())
    elif cmd == 'B': 
        if lstack:
            lstack.pop()
    else: 
        lstack.append(cmd.split(" ")[1])

for each in lstack:
    print(each, end="")
rstack.reverse()
for each in rstack:
    print(each, end="")

테스트 케이스는 다 통과가 되는데 시간초과가 났다.

sys를 안쓰고 그냥 인풋으로 받은게 큰것같았다.

 

 

 

두번째 시도

from sys import stdin

lstack = list(stdin.readline().strip())
rstack = []

N = int(input())

for _ in range(N):
    cmd = input()
    if cmd == 'L': 
        if lstack:
            rstack.append(lstack.pop())
    elif cmd == 'D': 
        if rstack:
            lstack.append(rstack.pop())
    elif cmd == 'B':  
        if lstack:
            lstack.pop()
    else:  
        lstack.append(cmd.split(" ")[1])

print(''.join(lstack + list(reversed(rstack))))

또 시간초과....

 

 

 

 

 

세번째 시도

import sys

lstack = list(sys.stdin.readline().strip())
rstack = []

N = int(input())

for _ in range(N):
    cmd = sys.stdin.readline()
    if cmd[0] == 'L': 
        if lstack:
            rstack.append(lstack.pop())
    elif cmd[0] == 'D': 
        if rstack:
            lstack.append(rstack.pop())
    elif cmd[0] == 'B': 
        if lstack:
            lstack.pop()
    else:
        lstack.append(cmd[2])

print(''.join(lstack + rstack[::-1]))

포문 안에 명령값을 받는 인풋도 sys.stdin.readline으로 바꿔줬다.

그리고 마지막에 프린트할때도 뒤집어서 출력해야하는 rstack을 reversed가 아니라 [::-1]로 바꿔줬다.

 

 

 

 

그랬더니 통과!

 

 

반응형