🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/💛 백준

[백준/알고리즘기초1] 자료구조1. 10828번 스택(JavaScript)

안오늘 2021. 10. 10. 10:42

문제

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

 

10828번: 스택

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

www.acmicpc.net

 

첫번째 풀이 : 시간초과

코드는 아래와 같았다.

철저히 .. 문제를 코드로 구현한 .. 수준..ㅋ

const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n');
const N = parseInt(input.shift(), 10);
let stack = [];

for (let i = 0; i < N; i++) {
    let command = input[i].split(' ');
    if (command[0] === 'push') {
        stack.push(Number(command[1]));
    }
    else if (command[0] === 'top') {
        if (stack.length === 0) {
            console.log(-1);
        }
        else {
            console.log(stack[stack.length - 1]);
        }
    }
    else if (command[0] === 'size') {
        console.log(stack.length);
    }
    else if (command[0] === 'empty') {
        if (stack.length === 0) {
            console.log(1);
        }
        else {
            console.log(0);
        }
    }
    else if (command[0] === 'pop') {
        if (stack.length === 0) {
            console.log(-1);
        }
        else {
            const number = stack.pop();
            console.log(number);
        }
    }
}

 

두번째 풀이 : 성공

출력을 각각 명령어일때마다 하면 시간초과가 생기는 것 같다.

한 곳에 출력할 것들을 담아놓은다음, \n을 이용해서 출력해야 성공한다.

코드는 아래와 같았다.

const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n');
const N = parseInt(input.shift(), 10);
let stack = [];
let answer = [];

for (let i = 0; i < N; i++) {
    switch (input[i]) {
        case 'pop':
            answer.push(stack.pop() || -1);
            break;

        case 'top':
            answer.push(stack[stack.length - 1] || -1);
            break;

        case 'size':
            answer.push(stack.length);
            break;

        case 'empty':
            answer.push(stack[0] ? 0 : 1);
            break;

        default:
            stack.push(Number(input[i].split(' ')[1]));
            break;
    }
}
console.log(answer.join('\n'));

우선 if else if 로 난잡한 코드를 switch, case로 깔끔하게 정리했다.

그리고 push의 경우에만 split하면 되므로 가장 마지막 default에서 작업한다!

정말 깔끔해졌다!