[백준 | Javascript] 10828

박기영·2022년 8월 30일
0

백준

목록 보기
89/127

알고리즘 기초 1/2. 200 - 자료구조 1
10828번. 스택

문제

10828번 문제 링크

solution

const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

const iter = input.shift();

let stack = [];

// 시간 초과되는 것을 방지하기 위해
// ans 배열에 값들을 넣어놓고 마지막에 join으로 문자열로 바꿔서 한번에 출력
let ans = [];

// input 배열의 원소를 하나씩 짚으면서 명령어 판단
for(let i = 0; i < iter; i++){
    if(input[i].includes("push")){
        // "push 1", 이런 식으로 되어있기 때문에 split을 통해 정수를 분리해야함
        let pushNum = input[i].split(" ");
        stack.push(Number(pushNum[1]));
    } else if(input[i].includes("pop")){
        // stack.length가 0보다 커야지 pop 가능
        // 스택 가장 위(stack 배열 가장 뒤)의 정수를 빼고, 출력해야함.
        if(stack.length > 0){
            let popNum = stack.pop();
            ans.push(popNum)
        } else {
            ans.push(-1);
        }
    } else if(input[i].includes("size")){
        // 단순 stack.length 출력
        ans.push(stack.length);
    } else if(input[i].includes("empty")){
        // 비어있으면 1, 들어있으면 0 출력
        if(stack.length === 0){
            ans.push(1);
        } else {
            ans.push(0);
        }
    } else if(input[i].includes("top")){
        // 비어있으면 -1, 들어있으면 가장 뒤에 있는 값 출력
        if(stack.length === 0){
            ans.push(-1);
        } else {
            ans.push(stack[stack.length - 1]);
        }
    }
}

console.log(ans.join("\n"));
profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글