백준 10828번 스택

걍걍규·2023년 7월 6일
0
post-thumbnail

문제를 먼저 보자

  • push X 입력은 X를 push 해준다
  • pop 입력은 가장 위에 있는 즉 마지막으로 들어온 정수를 빼고 해당 값을 출력
    스택에 들어있는 정수가 없는 경우 undefined일 시 -1 출력
  • size 단순하다 length를 이용해 갯수를 출력
  • empty 는 비었다면 1 아니면 0 출력
  • top 스택의 가장 위에 있는 정수 즉 마지막으로 들어온 정수를 출력하고 없을 시 -1 출력

단순하게 이 내용을 코드로 옮겨 적는 것이 전부인 줄 알았다 그랬었다..

const fs = require("fs");
// let input = fs.readFileSync("/dev/stdin", "utf8").toString().split('\n');
let input = fs.readFileSync("example.txt", "utf8").toString().split('\n');

//인풋에 입력을 받아서 넣는다

let n = input[0]	//n에는 첫째줄에 주어지는 명령의 수를 넣어준다
let result = []		//그 외에 명령들을 넣어 줄 배열이다
let arr = []	//push, pop, top, size, empty 등의 명령을 처리해 줄 배열이다
let answer = []	//마지막에 한번에 출력하기 위해 명령의 결과 값을 모아줄 배열이다

for(let i=1; i<=n; i++){
    result.push(input[i])
}

//1번 인덱스 부터 마지막 인덱스 까지 result 배열에 push

for(let i=0; i<result.length; i++){
    if(result[i].includes('push')){
        arr.push(+result[i].replace('push', ''))
      //push 명령의 경우 단어를 공백으로 지워 준 후 정수형으로 변환해 주는 과정을 거쳐주었다
    }
    if(result[i].includes('top')){
        if(arr[arr.length-1] == undefined){
            answer.push(-1)
        }else{
            answer.push(arr[arr.length-1])
        }
    }
    if(result[i].includes('size')){
        answer.push(arr.length)
    }
    if(result[i].includes('empty')){
        if(arr.length === 0){
            answer.push(1)
        }else{
            answer.push(0)
        }
    }
    if(result[i].includes('pop')){
        str = arr.pop()
        if(str === undefined){
            answer.push(-1)
        }else{
            answer.push(str)
        }
    }
}

/*
includes 문자열 이용해 result의 하나하나 인덱스 마다 각 명령값이 있는지 판별해준 후 그에 맞는 출력값을 
answer 배열에 하나하나 스택으로 쌓아준다
*/


console.log(answer.join('\n'))

/*
마지막에는 answer 배열이 answer[ ??, ??, ??, ?? ] 이런 모양으로 출력되기 때문에
배열 메서드 join을 이용하여 하나의 인덱스 마다 줄바꿈을 해주고 합쳐주었다
*/

구현 자체는 간단했고 생각보다 쉽게 원하는 모양을 만들었지만 console.log를 남발하는 탓에
에러가 나기도 하고 줄바꿈을 구현하기 위해 배열에 삽입 후에 join으로 처리해 주는 방식을 택하였다
확실히 재귀 전 단계의 문제는 어느정도 풀겠는데 .. 재귀 , BFS 너무 어려워 조원들께 미안합니다
얼른 따라가야지

profile
안녕하시오?

0개의 댓글