브라우저 기록 클래스
하나의 탭에서 페이지 방문 기록과 뒤로 가기, 앞으로 가기를 관리하는 BrowserHistory 클래스를 작성하시오.
작성할 클래스
다음 형태의 클래스를 작성한다.
class BrowserHistory:
def __init__(self, homepage):
# 코드를 작성하세요.
def visit(self, url):
# 코드를 작성하세요.
def back(self, steps):
# 코드를 작성하세요.
def forward(self, steps):
# 코드를 작성하세요.
- 생성 직후 현재 페이지는
homepage이다. visit(url)은 현재 페이지에서url로 이동한다. 현재 위치보다 앞쪽에 남아 있던 기록은 모두 삭제한다.back(steps)는 방문 기록에서 최대steps번 이전으로 이동하고 현재 URL을str로 반환한다. 홈페이지보다 이전으로는 이동하지 않는다.forward(steps)는 방문 기록에서 최대steps번 다음으로 이동하고 현재 URL을str로 반환한다. 가장 최근 기록보다 앞으로는 이동하지 않는다.- 이전에 방문한 URL이 다시 주어질 수 있으며,
visit이 호출될 때마다 새로운 방문으로 기록한다.
클래스를 사용하는 코드
작성한 클래스는 아래 코드와 함께 실행된다.
homepage = input()
q = int(input())
browser = BrowserHistory(homepage)
for _ in range(q):
command = input().split()
if command[0] == "visit":
browser.visit(command[1])
elif command[0] == "back":
result = browser.back(int(command[1]))
print(result)
print(type(result))
else:
result = browser.forward(int(command[1]))
print(result)
print(type(result))
위 코드가 정상적으로 동작하도록 클래스의 정의 전체를 제출한다. 입력을 받거나 객체를 생성하는 코드는 제출하지 않는다.
상태만 변경하는 메서드의 반환값은 출력하지 않는다. 값을 조회하거나 계산 결과를 반환하는 메서드는 반환값과 자료형을 출력한다.
입력
첫째 줄에 시작 페이지 homepage가 주어진다.
둘째 줄에 명령 수 \(Q\)가 주어진다. 다음 \(Q\)개의 줄에는 다음 명령 중 하나가 주어진다.
visit url: 새 페이지를 방문한다.back steps: 최대steps번 뒤로 이동한다.forward steps: 최대steps번 앞으로 이동한다.\(1 \le Q \le 1,000\)
- \(1 \le steps \le 100\)
homepage과url은 영문 소문자와 마침표로 이루어진 길이 1 이상 20 이하의 문자열이다.
출력
back과 forward 명령마다 이동 후 현재 URL과 반환값의 자료형을 출력한다. visit 명령은 아무것도 출력하지 않는다.
예제 입력 1
start.com
10
visit a.com
visit b.com
visit c.com
back 1
back 1
forward 1
visit d.com
forward 2
back 2
back 7
예제 출력 1
b.com
<class 'str'>
a.com
<class 'str'>
b.com
<class 'str'>
d.com
<class 'str'>
a.com
<class 'str'>
start.com
<class 'str'>
예제 설명 1
start.com에서 a.com, b.com, c.com을 차례로 방문한다.
- 한 번 뒤로 가면
b.com, 다시 한 번 뒤로 가면a.com이다. - 한 번 앞으로 가면
b.com이다. - 여기서
d.com을 방문하면 앞쪽에 있던c.com기록이 삭제된다. - 따라서 앞으로 두 번 이동하려 해도 현재 페이지는
d.com그대로이다. - 두 번 뒤로 가면
a.com이고, 다시 일곱 번 뒤로 가려 해도 홈페이지인start.com에서 멈춘다.
예제 입력 2
home.com
2
back 1
forward 1
예제 출력 2
home.com
<class 'str'>
home.com
<class 'str'>
코멘트