여러 데이터들의 묶음을 저장하고 효율적으로 사용하는 방법
*특정한 상황에 놓인 문제를 해결하는 데에 특화
const stack = []
stack.push(1) // [1]
stack.push(2) // [1, 2]
stack.push(3) // [1, 2, 3]
stack.push(4) // [1, 2, 3, 4]
stack.push(5) // [1, 2, 3, 4, 5]
// LIFO(Last In First Out)
stack.pop() // [1, 2, 3, 4]
stack.pop() // [1, 2, 3]
stack.pop() // [1, 2]
stack.pop() // [1]
// FILO(First In Last Out)
- 새로운 페이지로 접속할 때
: 현재 페이지를 Prev Stack에 보관- 뒤로 가기 버튼을 눌러 이전 페이지로 돌아갈 때
: 현재 페이지를 Next Stack에 보관하고, Prev Stack에 가장 나중에 보관된 페이지를 현재 페이지로 가져옴- 앞으로 가기 버튼을 눌러 앞서 방문한 페이지로 이동할 때
:Next Stack의 가장 마지막으로 보관된 페이지를 가져옴- 마지막
:현재 페이지를 Prev Stack에 보관
function browserStack(actions, start) {
// 출력 예시 : [[prev],current,[next]]
// -1 : 뒤로 가기
// 1 : 앞으로 가기
let prev = []
let current = start
let next = []
// 출력에 필요한 변수들 생성
// current : 시작값 할당
// 각 변수에 저장해 기억해 두기위한 재귀함수 생성
let memo = (actions) => {
let [head, ...tail] = actions
for (let i = 0; i < actions.length; i++) {
if(typeof head === 'string') {
//새로운 페이지 접속
prev.push(current)
current = head
next = []
} else if(head === -1) {
// 뒤로가기
next.push(current)
if(prev.length !== 0) {
current = prev.pop()
}
} else if(head === 1) {
// 앞으로 가기
prev.push(current)
current = next.pop()
}
return memo(actions.slice(1))
}
}
// 재귀함수 실행
memo(actions)
return [prev, current, next]
}