https://www.acmicpc.net/problem/1406
처음에 보고 문자열로 파싱하는게 가장 빠르다고 판단해서 풀었는데 시간초과가 떴다.
시간초과 코드
#1406_에디터
s=str(input())
num=int(input())
cursor=len(s)
for _ in range(num):
ctrl=list(map(str,input().split()))
if cursor<0:
cursor=0
if ctrl[0]=='P':
if cursor==0:
s=ctrl[1]+s
else:
s = s[0:cursor]+ctrl[1]+s[cursor:]
cursor = cursor+1
elif ctrl[0]=='L':
if cursor==0:
continue
cursor = cursor-1
elif ctrl[0]=='D':
if cursor==len(s):
continue
cursor = cursor+1
elif ctrl[0]=='B':
if cursor==0:
continue
s = s[0:cursor-1]+s[cursor:]
cursor=cursor-1
print(s)
알고보니 스택 문제였다,, 스택이 시간복잡도가 훨씬 빠르다
정답코드
#1406_에디터
from sys import stdin
s=list(stdin.readline().strip())
res=[]
num=int(input())
cursor=len(s)
for _ in range(num):
ctrl=list(map(str,input().split()))
if ctrl[0]=='P':
s.append(ctrl[1])
elif ctrl[0]=='L':
if s:
res.append(s.pop())
else: continue
elif ctrl[0]=='D':
if res:
s.append(res.pop())
else:continue
elif ctrl[0]=='B':
if s:
s.pop()
else: continue
print(''.join(s + list(reversed(res))))
스택 두개를 놓고 커서 기준으로 분할되게 서로 넣고 빼면된다.
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준/BOJ]#13565:침투[DFS/그래프/깊이우선탐색/파이썬/python] (0) | 2022.06.03 |
---|---|
[백준/BOJ]#2078:무한이진트리[트리/수학/파이썬/python] (0) | 2022.04.09 |
[백준/BOJ]#15805:트리 나라 관광 가이드[트리/파이썬/python] (0) | 2022.04.08 |
[백준/BOJ]#9935:문자열 폭발[문자열/스택/파이썬/python] (0) | 2022.02.14 |
[백준/BOJ]#2263:트리의 순회 [트리/분할정복/파이썬/python] (0) | 2022.02.14 |