코드노트

자바스크립트 배열 stack 코드 문제 풀이 본문

Code note/자바스크립트 알고리즘 문제풀이

자바스크립트 배열 stack 코드 문제 풀이

코드노트 2022. 9. 16. 20:50

문제 설명

1, 2, 3을 가진 배열에서

- 1, 2, 3

- 3, 2, 1

- 3, 1, 2

이 세가지를 stack을 통해서 입력 순서대로 숫자를 없앨 수 있는지를 true, false로 반환해야한다.

 

 

function answer(train) {
  let stack = [];
  let num = 0;

  for (let i = 0; i < train.length; i++) {
    while (stack.length === 0 || stack[stack.length - 1] < train[i]) {
      // while (stack의 길이가 0이거나 현재 stack의 가장 끝에 있는 수가 train[i]보다 작을때)
      stack.push(++num); // 1, 2, 3 을 추가
    }
    if (stack[stack.length - 1] === train[i]) {
    // if(현재 stack의 가장 끝에 있는 수가 train[i]와 같으면
      stack.pop(); // 제거
    } else {
      return false; // 그게 아니라면 fasle
    }
  }
  return true;
}

- 처음에는 배열을 순서대로 넣고 넣은 순서대로 뺄생각을 했었다.

- 1, 2, 3이라는 배열이 정해져있었기 때문에 1, 2, 3배열을 만들어놓고 비교하면서 제거해주면 되는 문제 였다.

- while이나 if 조건을 만들때 더 많은 생각을 해야할 것 같다.

- stack은 간단한 문제 같으면서도 막상 풀게 되면 헤메게 되는거 같다.

 

 

 

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 = [];
  let 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;
}

- 메서드를 통해서 풀게 되면 더 간결한 코드를 만들 수 있었다.