문제 설명
한 개의 탭을 가진 브라우저를 가지고 있습니다. 이 브라우저는 시작 시 홈페이지에서 시작하여 다른 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]]
- ["BrowserHistory","visit","visit","visit","back","back","forward","visit","forward","back","back"]
- 출력 :
- [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)
*/
링크
'코딩 테스트 연습 > LeetCode' 카테고리의 다른 글
[LeetCode] Valid Parentheses (0) | 2024.07.02 |
---|---|
[LeetCode] Single Number (0) | 2024.06.20 |
[LeetCode] Two Sum (2) | 2024.06.18 |
댓글