본문 바로가기
프로그래밍/알고리즘, 프로그래밍 언어

[알고리즘] Stack으로 브라우저 '뒤로 가기' '앞으로 가기' 구현

by 제이콥J 2021. 7. 27.

문제 설명

전달인자

- actions : String과 Number 타입을 요소로 갖는 브라우저에서 행동한 순서를 차례대로 나열한 배열

- start : String 타입의 시작 페이지를 나타내는 현재 접속해 있는 대문자 알파벳

출력 값

- [ [prev 스택], 현재 페이지, [next 스택] ]

조건

- 새로운 페이지로 접속할 경우 prev 스택에 원래 있던 페이지를 넣고 next 스택을 비움

- 뒤로 가기 버튼을 누를 경우 원래 있던 페이지를 next 스택에 넣고, prev 스택의 top에 있는 페이지로 이동한 뒤, prev 스택의 값을 pop

- 앞으로 가기 버튼을 누를 경우 원래 있던 페이지를 prev 스택에 넣고, next 스택의 top에 있는 페이지로 이동한 뒤, next 스택의 값을 pop

- 브라우저에서 뒤로 가기, 앞으로 가기 버튼이 비활성화일 경우(클릭이 되지 않을 경우)에는 스택에 push 하지 않음

 

코드 작성 포인트

1. prev, next 스택의 자료를 담기 위한 배열을 변수로 선언pop과 push로 값을 처리하기

2. 현재 페이지를 표현하는 문자열을 담기 위한 cur 변수 선언 후 값을 할당하기

 

코드 작성하기

function browserStack(actions, start) {
  
  let prev = [];     // prev 스택을 담을 배열
  let next = [];     // next 스택을 담을 배열
  let cur = start;   // 현재 페이지를 담을 문자열

  for (let action of actions) {

    // 앞으로 갈 경우
    if(action === 1 && next.length !==0) {
      prev.push(cur);
      cur = next.pop();

    // 뒤로 갈 경우
    } else if (action === -1 && prev.length !==0) {
      next.push(cur);
      cur = prev.pop();

    // 특정 페이지에 접속할 경우
    } else {
      prev.push(cur);
      cur = action;
      next = [];
    }
  }

  return [prev, cur, next]
}

 

반응형

댓글