1406 - python

고태희·2021년 12월 23일
0

알고리즘

목록 보기
6/15

문제

입력

입출력 예

입력
abcd
3
P x
L
P y
출력
abcdyx

내 코드

s = input()
cursor = len(s)
m = int(input())
for _ in range(m):
    x = input().split()
    com = x[0]
    if com == "P":
        item = x[1]
        s = s[0:cursor] + item + s[cursor:]
        cursor += 1
    elif com == "L":
        if cursor != 0:
            cursor -= 1
    elif com == "D":
        if cursor != len(s):
            cursor += 1
    elif com == "B":
        if cursor != 0:
            s = s[0:cursor-1] + s[cursor:]
            cursor -= 1
print(s)

스택으로 풀어야 하는데 그냥 문자열로 풀어서 시간초과
문자열 길이가 최대 100,000개에 입력할 명령어 개수가 최대 500,000개라서 당연한 결과였다..

새 풀이

from collections import deque
s = deque(input())
s2 = deque()
m = int(input())
n = len(s)

for _ in range(m):
    x = input().split()
    com = x[0]
    if com == "P":
        item = x[1]
        s.append(item)
    elif com == "L" and s:
        s2.appendleft(s.pop())
    elif com == "D" and s2:
        s.append(s2.popleft())
    elif com == "B" and s:
        s.pop()

print(''.join(s+s2))

이것도 시간초과..

다른사람 풀이

import sys
s = list(sys.stdin.readline().strip())
s2 = []
m = int(sys.stdin.readline())
n = len(s)

for _ in range(m):
    x = sys.stdin.readline().strip().split()
    com = x[0]
    if com == "P":
        item = x[1]
        s.append(item)
    elif com == "L" and s:
        s2.append(s.pop())
    elif com == "D" and s2:
        s.append(s2.pop())
    elif com == "B" and s:
        s.pop()

print(''.join(s+list(reversed(s2))))

import sys로 input받는 습관을 기르자

0개의 댓글