백준 1406 에디터

Hyun·2022년 10월 13일
0

코딩테스트

목록 보기
11/66

https://www.acmicpc.net/problem/1406
실패이유 : 시간초과

import sys

front_stack = list(sys.stdin.readline().rstrip())
back_stack = []

N = int(sys.stdin.readline().rstrip())

for _ in range(N):
    buf = list(sys.stdin.readline().rstrip().split())

    ins = buf[0]

    if ins == 'P':
        front_stack.append(buf[1])
    elif ins == 'L':
        if front_stack:
            back_stack.append(front_stack.pop())
    elif ins == 'D':
        if back_stack:
            front_stack.append(back_stack.pop())
    elif ins == 'B':
        if front_stack:
            front_stack.pop()

front_stack.extend(reversed(back_stack))
print("".join(front_stack))
  • insert(idx, value), pop(idx) 는 최악의 경우 O(n) 시간 복잡도
  • 명령어의 개수만큼 for문을 반복, 따라서 최종적인 시간 복잡도는 O(n^2)
    • 시간초과 발생

  • 커서 앞 문자들은 front_stack 에 보관, 커서 뒤 문자들은 back_stack 에 보관



  • pop(), append() 는 O(1) 시간 복잡도
    • 최종적인 시간복잡도 O(n)
  • back_stack 에 문자들은 커서에서 가까운 것이 나중에 들어간다.
    • 마지막에 하나의 문자열로 front_stack 과 합칠 때 reversed(back_stack) 처리

출처 : https://seongonion.tistory.com/53

0개의 댓글

관련 채용 정보