23300 : 웹 브라우저 2#
골드 V
34.986%
stack, queue, class 구현
deque를 사용한 cache class를 구현하고 차례로 해준다. 문제를 잘읽어야 하는게 back, front를 print하는 것은 역순으로 해주어야 한다는 것.
output#
현재 접속 중인 페이지 번호
back에
가장 최근에 방문한 순서대로
페이지 번호 출력(-1)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