bj1406 에디터

coh·2022년 6월 8일
0

백준

목록 보기
19/27

처음에 이 문제를 풀기 위해 그냥 list의 built in function을 이용했다. 근데 시간 초과가 나와서 다시 했음...

그래서 어떻게 data를 받아야할까 고민을 하다가 솔직히 나는 node구조로 doubly linked list를 생각했다. 근데 이렇게 하면 만약 data가 10만개가 들어왔을 경우 메모리 공간이 너무 차지할 거 같았음. 그래서 하다가 그만 두고 다시 생각을 해봤는데 도저히 생각이 나지 않아서 그냥 정답을 보았음.

정답을 보고는 사람들이 참 기발하다고 느낌.. ㅋㅋㅋ 어떻게 저런 양방향 stack을 생각해낼 수 있었는지. list를 하나 더 만들어서 커서가 이동하는 것을 표현한 것이 참 인상적이었음.

import sys
sys.stdin = open('에디터.txt', 'r')


# class Node:
#     def __init__(self, data):
#         self.data = data
#         self.next = None
#         self.prev = None
#
# class SLL:
#     def __init__(self):
#         self.head = None
#         self.size = 0
#
#     def insert(self, data, prev):
#         node = Node(data)
#         self.size += 1
#
#         if prev is None:
#             self.head = node
#         else:
#             node.next = prev.next
#             prev.next = node
#             node.prev = prev
#
#     def remove(self, prev):
#         if self.size == 0:
#             return -1
#         data = prev.next.data
#         prev.next = prev.next.next

card = list(sys.stdin.readline().rstrip())
temp = []
n = int(input())
index = len(card)
for i in range(n):
    check = sys.stdin.readline().split()
    # print(check)
    if check[0] == 'L' and card:
        temp.append(card.pop())
    if check[0] == 'D' and temp:
        card.append(temp.pop())
    if check[0] == 'B' and card:
        card.pop()
    if check[0] == 'P':
        card.append(check[1])

print("".join(card + list(reversed(temp))))
profile
Written by coh

0개의 댓글