정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

// 내 코드 
let input = require('fs').readFileSync('dev/stdin').toString().split('\n');
const stack = []
for (let i=1; , i <= input[0]; i++){
    const x= input[i].split(' ');
    if (x.length >1 ){
        stack.push(x[1])
    }else {
        switch (input[i]){
            case 'pop':
                stack.length=0 ? console.log(-1): console.log(stack.pop())
            case 'top':
                stack.length=0 ? console.log(-1): console.log(stack[stack.length-1])
            case 'size':
                console.log(stack)
            case 'empty':
                stack.length=0 ? console.log(1): console.log(0)
                
        }
    }
}
위에 처럼 작성을 했지만 통과하지 않음
const array = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const stack = [];
const result = [];
const len = array.shift();
for (let i = 0; i < len; i++) {        
    switch(array[i]) {
        case 'pop': 
          result.push(stack.pop() || -1);
          break;
        case 'size': 
          result.push(stack.length);
          break;
        case 'empty': 
          result.push(stack[0] ? 0 : 1);
          break;
        case 'top': 
          result.push(stack[stack.length - 1] || -1);
          break;
        default: 
          stack.push(array[i].split(" ")[1]);
          break;
    }
}
console.log(result.join('\n'));
출처 : https://gurtn.tistory.com/67
우선 array.shift로 스택에서 제일 아래 자료를 가져와서 for loop range를 설정해준다. 
그리고 switch 문을 적용을 해주는데 핵심은 세가지다
result.push(stack.pop() || -1)로 stack.pop()이 가능하지 않을 때(Falsy) -1을 결과에 추가하는 방식이다.시간초과 이슈로 result 한 배열에 답을 넣어주고 한번에 출력을 해준다. 
// 내 답변
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const len = input[0];
const answer = []
for (let i = 1; i <= len ; i++){
  const text = input[i].split(' ') 
  let reverse = text.map((word)=>{
    let x = word.split('')
    x.reverse()
    return x.join('')
  })
  const result = reverse.join(' ')
  answer.push(result)
	
}
console.log(answer.join('\n'))
배열을 다시 합칠 때는 arr.join()이 활용도가 높다.
js 배열 뒤집는 메서드는 arr.reverse() 
원본 유지하며 배열을 뒤집고자 할 때는 const reverseArr = [...arr].reverse() 구조분해할당 이용

// 내 답변 
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const range = input[0]
const answer = []
for (let i = 1; i <= range ; i++){
  let left = 0
  let right =0 
  const text = input[i].split('') 
  for (let x of text){
    if (x === `(`){
      left += 1
    }else {
      right +=1
    }
  }
  let result = ''
  left === right ? result ='YES': result='NO'
  answer.push(result)
	
}
console.log(answer.join('\n'))
잘 짠 것 같은데 틀렸다고 나온다.... 자세히 보니 만약 입력을 ())(()을 입력하면 내 코드로는 맞다고 나오지만 예제출력에서는 NO로 나왔다.
VPS의 정의를 제대로 이해하지 않고 시작해서 발생한 문제이다. 
//참고 답변
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const len = input.shift();
const result = [];
for (let i = 0; i < len; i++) {
    let cnt = 0;
    
    for (let s of input[i]) {
        cnt += s === "(" ? 1 : -1;
        
        if (cnt < 0) break;
    }
    
    result.push(cnt === 0 ? 'YES' : "NO");
}
console.log(result.join('\n'));
참고 : https://gurtn.tistory.com/68
괄호가 열린다음 닫혀야 하는데 열리지 않고 닫힌 순간에 cnt가 음수가 되어서 해당 문자열은 VPS가 아니게 된다.