23300 : 웹 브라우저 2

Contents

23300 : 웹 브라우저 2#

  • 골드 V

  • 34.986%

  • stack, queue, class 구현

deque를 사용한 cache class를 구현하고 차례로 해준다. 문제를 잘읽어야 하는게 back, front를 print하는 것은 역순으로 해주어야 한다는 것.

output#

  1. 현재 접속 중인 페이지 번호

  2. back에 가장 최근에 방문한 순서대로 페이지 번호 출력(-1)

  3. front에 가장 최근에 방문한 순서대로 페이지 번호를 출력(-1)

from collections import deque

class Cache:
    def __init__(self):
        self.opened_page = "x"
        self.front_cache = deque()
        self.back_cache = deque()

    def access(self, i):
        self.front_cache.clear()
        if self.opened_page != "x":
            self.back_cache.append(self.opened_page)
        self.opened_page = i

    def backward(self):
        if len(self.back_cache) > 0:
            self.front_cache.append(self.opened_page)
            to_go = self.back_cache.pop()
            self.opened_page = to_go

    def frontward(self):
        if len(self.front_cache) > 0:
            self.back_cache.append(self.opened_page)
            to_go = self.front_cache.pop()
            self.opened_page = to_go

    def compress(self):
        if self.back_cache:
            compressed_back_cache = deque()
            prev_page = None
            for page in self.back_cache:
                if page != prev_page:
                    compressed_back_cache.append(page)
                prev_page = page
            self.back_cache = compressed_back_cache

    def printer(self):
        print(self.opened_page)
        if len(self.back_cache) > 0:
            print(*reversed(self.back_cache))
        else:
            print(-1)
        if len(self.front_cache) > 0:
            print(*reversed(self.front_cache))
        else:
            print(-1)
# input setting
problem_num = "23300"
import os, sys

path = os.getcwd() + f"\\txt\\{problem_num}" + ".txt"
sys.stdin = open(path, "r")

n, q = map(int, sys.stdin.readline().split())
cache = Cache()
for i in range(q):
    query = sys.stdin.readline().split()
    if query[0] == "A":
        cache.access(int(query[1]))
    elif query[0] == "B":
        cache.backward()
    elif query[0] == "F":
        cache.frontward()
    elif query[0] == "C":
        cache.compress()
cache.printer()
1
3 1 2 1
-1