문제를 먼저 보자
- 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 너무 어려워 조원들께 미안합니다
얼른 따라가야지