캐또's coding

10828 - 스택 - node.js 본문

기초 공부/백준 문제 풀이

10828 - 스택 - node.js

JS_K_coding 2023. 1. 21. 21:55

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net


이전까지의 문제들이 백준의 제출 방식에 익숙해지고, node.js를 다루는 것에 익숙해지는 것이라고 한다면, 이번 문제부터 진행될 문제들은 본격적으로 알고리즘에 대해서 알아보고 알고리즘을 실제로 구현해보는 문제들이 될 것이다.

 

알고리즘 이론과 관련된 부분은 별도로 다루기로 한다.

const fs = require("fs");
let [n, ...input] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
//입력으로 첫 번째 줄에 들어온 값은 명령의 수 N
//다음 줄부터는 input으로 할당했다.

const result = [];
const stack = [];
//결과를 출력할 result, 스택을 넣을 stack을 할당해둔다.
//바로 출력하면 안되고 result를 따로 만들어 출력하는 이유는 시간초과 문제 때문이다.

for (i = 0; i < n; i++) {
  switch (input[i]) {
    case "pop":
      result.push(stack.pop() || -1);
      break;
      //pop의 케이스, 만약 pop이라면 stack.pop 혹은 -1을 넣는다.
      
    case "size":
      result.push(stack.length);
      break;
      //size의 케이스, 만약 size라면 stack.length를 넣는다.
      
    case "empty":
      result.push(stack[0] ? 0 : 1);
      break;
      // empty의 케이스, 만약 empty라면 stack[0]이 있으면 0 없으면 1을 출력한다.
      
    case "top":
      result.push(stack[stack.length - 1] || -1);
      break;
      // top의 케이스, 만약 top이면 stack의 마지막인덱스를 넣거나 -1을 넣는다.
      
    default:
      stack.push(input[i].split(" ")[1]);
      break;
      //위 모든 케이스가 아닌 경우 즉, push인 경우 stack에 input을 추가한다.
  }
}
console.log(result.join("\n"));
//마지막으로 모든 값을 줄넘김을 넣어서 한 번에 출력하면 문제 해결
Comments