[LeetCode] Design Browser History
본문 바로가기
코딩 테스트 연습/LeetCode

[LeetCode] Design Browser History

by 은돌1113 2024. 6. 25.

문제 설명

 

한 개의 탭을 가진 브라우저를 가지고 있습니다. 이 브라우저는 시작 시 홈페이지에서 시작하여 다른 URL을 방문할 수 있으며, 뒤로 이동하거나 앞으로 이동할 수 있습니다. 이를 구현하는 BrowserHistory 클래스를 만들어 보겠습니다:

  • BrowserHistory(string homepage): 브라우저 객체를 홈페이지로 초기화합니다.
  • void visit(string url): 현재 페이지에서 해당 URL을 방문합니다. 이 과정에서 앞으로의 이력을 모두 지웁니다.
  • string back(int steps): 최대 steps만큼 이전 기록으로 이동합니다. 실제 이동 가능한 만큼만 이동하며, 이동 후의 현재 URL을 반환합니다.
  • string forward(int steps): 최대 steps만큼 앞으로 기록으로 이동합니다. 실제 이동 가능한 만큼만 이동하며, 이동 후의 현재 URL을 반환합니다.

제한사항

  • 홈페이지(homepage)와 방문 URL(url)의 길이는 1에서 20 사이입니다.
  • 이동할 수 있는 최대 steps는 100입니다.
  • 홈페이지와 URL은 소문자 영어 알파벳과 점(.)으로 이루어져 있습니다.
  • visit, back, forward 메서드 호출 횟수는 최대 5000번입니다.

입출력 예

 

입출력 예 #1

  • 입력 : 
    • ["BrowserHistory","visit","visit","visit","back","back","forward","visit","forward","back","back"]
    • [["leetcode.com"],["google.com"],["facebook.com"],["youtube.com"],[1],[1],[1],["linkedin.com"],[2],[2],[7]]
  • 출력 : 
    • [null,null,null,null,"facebook.com","google.com","facebook.com",null,"linkedin.com","google.com","leetcode.com"]

문제풀이

/**
 * Initialize your data structure here.
 * @param {string} homepage
 */
var BrowserHistory = function(homepage) {
    this.history = [homepage];
    this.currentPage = 0;
};

/** 
 * @param {string} url
 * @return {void}
 */
BrowserHistory.prototype.visit = function(url) {
    // 현재 위치 이후에 있던 기록은 모두 제거되어야 하기 때문에
    // visit 때 slice를 사용하여 이후 기록은 삭제한다.
    this.history = this.history.slice(0, this.currentPage + 1);
    // 현재 방문한 url을 추가한다.
    this.history.push(url);
    // currentPage를 1 증가시킨다.
    this.currentPage++;
};

/** 
 * @param {number} steps
 * @return {string}
 */
BrowserHistory.prototype.back = function(steps) {
		// 뒤로가기를 할 때 음수가 되는 걸 방지하기 위해 Math.max를 사용하여 처리
    this.currentPage = Math.max(0, this.currentPage - steps);
    
    return this.history[this.currentPage];
};

/** 
 * @param {number} steps
 * @return {string}
 */
BrowserHistory.prototype.forward = function(steps) {
		// currentPage보다 초과하는 것을 방지하기 위해 Math.min을 사용
    this.currentPage = Math.min(this.currentPage + steps, this.history.length - 1);
    
    return this.history[this.currentPage];
};

/** 
 * Your BrowserHistory object will be instantiated and called as such:
 * var obj = new BrowserHistory(homepage)
 * obj.visit(url)
 * var param_2 = obj.back(steps)
 * var param_3 = obj.forward(steps)
 */

링크

https://leetcode.com/problems/design-browser-history/

'코딩 테스트 연습 > LeetCode' 카테고리의 다른 글

[LeetCode] Valid Parentheses  (0) 2024.07.02
[LeetCode] Single Number  (0) 2024.06.20
[LeetCode] Two Sum  (2) 2024.06.18

댓글