[Coding_Test] Design_Browser_History

Design Browser History

Q. 인터넷 브라우저에서 방문기록과 동일한 작동을 하는 BrowserHistory class를 구현할 것이다. 구현할 브라우저는 Homepage에서 시작하고, 다른 url에 방문할 수 있다. 또, “뒤로가기”와 “앞으로 가기”가 작동하도록 구현해라

  • BrowserHistory(string homepage)를 호출하면 브라우저는 homepage에서 시작이 된다.
  • void visit(string url)을 호출하면 현재 앞에 있는 페이지의 기록은 다 삭제가 되고, url로 방문을 한다.
  • string back(int streps)를 호출하면 steps수 만큼 “뒤로 가기”를 한다. “뒤로 가기”를 할 수 있는 page 개수가 x이고, step > x라면 x번 만큼만 “뒤로가기”를 한다. “뒤로 가기”가 완료되면 현재 url을 return 한다.
  • string forword(int steps)을 호출하면 “앞으로 가기”를 한다. “앞으로 가기”를 할 수 있는 page 개수가 x이고, step > x라면 x 번 만큼만 “앞으로 가기”를 한다. “앞으로 가기”가 완료되면 현재 url을 return한다.

제약조건

  1. 1 <= homepage.length <=20
  2. 1 <= url.length <= 20
  3. 1 <= step <= 100
  4. hompage와 url은 '.'를 포함한 lower case 영문자로 되어있다.
  5. visit, back 그리고 forword는 최대 5000번의 호출이 있을 수 있다.

코드구현

class ListNode(object):
    def __init__(self, val = 0, next=None, prev=None):
        self.val = val
        self.next = next
        self.prev = prev

class BrowserHistory(object):
    def __init__(self, homepage):
        self.head = self.current = ListNode(val=homepage)

    def visit(self, url):
        self.current.next = ListNode(val=url, prev=self.current)
        self.current = self.current.next
        return None
    def back(self, steps):
        while steps > 0 and self.current.prev != None:
            steps -= 1
            self.current = self.current.prev
        return self.current.val
    def forward(self, steps):
        while steps >0 and self.current.next != None:
            steps -= 1
            self.current = self.current.next
        return self.current.val


browswerHistory = BrowserHistory("leetcode.com")
browswerHistory.visit("google.com")
browswerHistory.visit("facebook.com")
browswerHistory.visit("youtube.com")
browswerHistory.back(1)
browswerHistory.back(1)
browswerHistory.forward(1)
browswerHistory.visit("linkdin,com")
browswerHistory.forward(2)
browswerHistory.back(2)
browswerHistory.back(7)

참조 : 개발남노씨 코딩테스트

Leave a comment