[자료구조] 스택(Stack)

박소정·2023년 11월 26일
0

알고리즘

목록 보기
1/3
post-thumbnail

스택이란?🧐

스택은 "쌓다"라는 의미로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조이다.
컴퓨터에서 아주 많이 사용되는 자료구조이며 스마트폰의 '뒤로가기'를 눌렀을 때 현재 수행되는 앱이 종료되고 바로 직전에 수행되던 앱이 나타나는 게 바로 스택이다.

후입선출 (LIFO: Last-In First-Out)😶

스택의 가장 큰 특징은 후입선출(LIFO)이다.
이는 가장 최근에 들어온 데이터가 가장 먼저 나간다는 의미를 가진다.

다음 그림과 같이 1번을 넣고 2번을 넣는다면 가장 먼저 나가는 것은 2번이된다.
참고로 는 이와 반대된다.

적용✨

원리도 중요하지만 그보다 중요한 것은 이와 같은 원리를 직접적으로 적용해보는 거라고 생각한다.
마침 Baekjoon에 스택의 원리를 적용할만한 좋은 문제가 있었다! (28278번)

  • 문제 설명

    정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성

    이 글을 보시는 여러분 붉은색 숫자를 무시하지 마세요 😥
    숫자는 명령어와 동일한 역할을 합니다..
    저거 실수인줄 알고 무시했다가 30분동안 문제의 입출력 이해를 못했어요.

  • 코드

    const fs = require("fs");
    const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
    let input = fs.readFileSync(filePath).toString().trim().split("\n");
    
    const N = Number(input[0]);
    let stack = [];
    let result = [];
    
    for (let i = 1; i <= N; i++) {
      let [num, value] = input[i].split(" ");
    
      switch (num) {
        case "1":
          stack.push(Number(value));
          break;
        case "2":
          if (stack.length > 0) {
            result.push(stack.pop());
          } else {
            result.push(-1);
          }
          break;
        case "3":
          result.push(stack.length);
          break;
        case "4":
          result.push(stack.length === 0 ? 1 : 0);
          break;
        case "5":
          if (stack.length > 0) {
            result.push(stack[stack.length - 1]);
          } else {
            result.push(-1);
          }
          break;
        default:
          break;
      }
    }
    
    console.log(result.join("\n"));

0개의 댓글