[자료구조] stack문제- 기차운행

youngseo·2022년 2월 14일
post-thumbnail

stack문제

기차운행

열차가 들어갔다 나올 수 있는 플랫폼이 있다. 열차가 1번부터 3번까지 순서대로 들어온다고 할 때, 입력 순서대로 나갈 수 있는지 없는지를 프로그램을 작성하시오.
입력은 차량 순서 번호가 적혀 있는 배열이며, 가능 여부에 따라 true/false를 반환한다.

방법1

function answer(train) {
  //1. 스택만들기
  let stack = [],
    num = 0;

  //train만큼 for문을 돌면서, train이 나올 수 있는지를 판단
  for (let i = 0; i < train.length; i++) {
    while (stack.length === 0 || stack[stack.length - 1] < train[i]) {
      stack.push(++num);
    }

    if (stack[stack.length - 1] === train[i]){
      stack.pop();
    } else {
      return false;
    }
  }
  return true;
}

방법2(코드 가독성↑)

/* user code */
if(!Array.prototype.peek){
  Array.prototype.peek=function(){
    return this[this.length-1];
  }
}

if(!Array.prototype.isEmpty){
  Array.prototype.isEmpty = function(){
    return this.length===0;
  }
}

function answer(train) {

  let stack = [],
    num = 0;


  for (let i = 0; i < train.length; i++) {
    while (stack.isEmpty() || stack.peek() < train[i]) {
      stack.push(++num);
    }

    if (stack.peek() === train[i]){
      stack.pop();
    } else {
      return false;
    }
  }
  return true;
}

0개의 댓글