알고리즘

[BOJ]28278 - 스택2(JS)

로돌씨 2024. 7. 30. 09:08

 

풀이

let fs = require("fs");
let input = fs.readFileSync('/dev/stdin').toString().trim().split("\n");
input.shift();
let stack = [];
const result = [];
input.forEach((line) => {
    // 입력
    //line의 길이가 1이 아니라면( 즉 입력값이 여러개라면 ) 띄어쓰기를 기준으로 나누어준다.
    //Number로 맵핑하고 stack에 추가한다.   
    if(line.length !== 1) {
        const target = line.split(" ")[1]
        const targetNum = Number(target)
        stack.push(targetNum)
    //입력값이 한개라면 
    } else {
        const num = Number(line)
        //입력값이 2라면 stack의 길이가 있을때에(stack에 정수가 존재할때에) 
        if(num === 2) {
            if(stack.length) {
                //stack에서의 뒷쪽에있는값을 결과값에 추가한다.
                result.push(stack.pop())
                //아니라면 result에 -1을 추가한다.
            } else {
                result.push(-1)
            }
        //3이라면 stack의 길이를 result에 추가한다.
        } else if(num === 3) {
            result.push(stack.length)
        //4라면 stack에 정수가 존재할때에 0을 추가한다.
        } else if(num === 4) {
            if(stack.length) { 
                result.push(0)
            //아니라면 1을 추가한다.
            } else {
                result.push(1)
            }
            //5라면 정수가 존재할때에 stack에서 맨마지막 요소를 result에 추가한다.
        } else if(num === 5) {
            if(stack.length) {
                result.push(stack.at(-1))
                //아닐시에는 -1 을 추가한다.
            } else {
                result.push(-1)
            }
        }
    }
})

console.log(result.join("\n"))

 

사실 문제조차 이해하질 못해 풀이를 보며 주석을 달며 이해하려고 노력했다. 처음엔 문제에 1 2 3 4 5 번을 순서대로 하라는 건 줄 알았는데 1번이나오면 1번명령 , 3번이나오면 3번명령 이런식이였다... 문해력 goat ... 그리고 2번 명령에서 출력을 하라고되어있는데 저것도 이해가 잘 안되었다 알고보니 그냥 낚시성 문장이였던것같다. 문제를 잘  읽으려 노력해야겠다고 생각한 문제였다.

'알고리즘' 카테고리의 다른 글

[BOJ]4949 - 균형잡힌 세상(JS)  (0) 2024.08.13
[BOJ]28279 - 덱2(JS)  (0) 2024.08.13
[BOJ]4948 - 베르트랑 공준(JS)  (0) 2024.07.25
[BOJ]4134 - 다음소수 (JS)  (1) 2024.07.23
[BOJ]1934 - 최소공배수(JS)  (0) 2024.07.19