꾸준히 합시다

백준 파이썬 1406번: 에디터 본문

코딩 테스트 문제 풀이

백준 파이썬 1406번: 에디터

tturbo0824 2021. 3. 8. 00:16

https://www.acmicpc.net/problem/1406

 

1406번: 에디터

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수

www.acmicpc.net

# Solution 1 - 시간 초과 ...

import sys

word = list(sys.stdin.readline().rstrip())
test_case = int(sys.stdin.readline())
new = []

for i in range(test_case):
    cmd = list(sys.stdin.readline().split())
    if cmd[0] == "L" and word:
        new.append(word.pop())
    elif cmd[0] == "D" and new:
        word.append(new.pop(0))
    elif cmd[0] == "B" and word:
        word.pop()
    elif cmd[0] == "P":
        word.append(cmd[1])
        
print(''.join(word + new[::-1]))

접근법은 처음부터 꽤 괜찮았던 것 같다. 하지만 역대급으로 시간 초과가 많이 나온 문제... 대략 15-20번정도 나온 듯 하다. 

 

 

# Solution 2

import sys

s1 = []
s2 = []

word = list(sys.stdin.readline().strip())
num = int(sys.stdin.readline())
s1 = word

for i in range(num):
    line = sys.stdin.readline().split()

    if line[0]=='L':
        if s1:
            s2.append(s1.pop())
    elif line[0]=='P':
        s1.append(line[1])
    elif line[0]=='D':
        if s2:
            s1.append(s2.pop())
    elif line[0]=='B':
        if s1:
            s1.pop()

s2.reverse()
sys.stdout.write(''.join(s1) + ''.join(s2))

 

솔직히 두 솔루션의 큰 차이는 모르겠다. 

Comments