알고리즘 문제풀이

[javascript] 10828 - 스택

승큐니 2023. 8. 20. 01:36

문제링크

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

풀이

어려운 문제는 아니었고, 항상 파이썬만으로 문제를 풀어왔었기 때문에 자바스크립트로 문제를 푸는 것을 연습하는 중에 다른 문제가 나오더라도 필요한 배경지식일 것 같아서 기록을 남긴다.

아래의 두 방식 모두 정답을 출력하는 코드들이지만, 첫번째 풀이의 경우 반복문이 실행될 때마다 출력을 하고, 두번째 풀이의 경우 반복문이 실행될 때마다 출력값을 담는 배열에 삽입 후 마지막에 한번에 출력한다.

자바스크립트는 다른 언어에 비해 안그래도 많이 느리기 때문에 시간 초과 문제를 많이 겪게 될 것 같고 이러한 팁들을 많이 기억해두고 사용해야 할 것 같다.

반복문이 실행되는 각 경우에 결과값을 출력하는 경우

let input = require('fs').readFileSync('10828.txt').toString().split('\n');
// let input = require('fs').readFileSync('dev/stdin').toString().split('\n');

const T = input[0];

const stk = [];

for (let i = 1; i <= T; i++) {
  const command = input[i].split(' ');
  switch (command[0]) {
    case 'push':
      stk.push(command[1]);
      break;
    case 'pop':
      console.log(stk.length > 0 ? Number(stk.pop()) : -1);
      break;
    case 'size':
      console.log(stk.length);
      break;
    case 'empty':
      if (stk.length === 0) {
        console.log(1);
      } else {
        console.log(0);
      }
      break;
    case 'top':
      console.log(stk.length > 0 ? Number(stk[stk.length - 1]) : -1);
      break;
  }
}

출력 값을 담을 배열(result)을 만들고, 이 안에 출력값들을 넣고 한번에 출력하는 경우

// let input = require('fs').readFileSync('10828.txt').toString().split('\n');
let input = require('fs').readFileSync('dev/stdin').toString().split('\n');

const T = input[0];

const stk = [];
const result = [];

for (let i = 1; i <= T; i++) {
  const command = input[i].split(' ');
  switch (command[0]) {
    case 'push':
      stk.push(command[1]);
      break;
    case 'pop':
      result.push(stk.length > 0 ? Number(stk.pop()) : -1);
      break;
    case 'size':
      result.push(stk.length);
      break;
    case 'empty':
      if (stk.length === 0) {
        result.push(1);
      } else {
        result.push(0);
      }
      break;
    case 'top':
      result.push(stk.length > 0 ? Number(stk[stk.length - 1]) : -1);
      break;
  }
}
console.log(result.join('\n'));