// 1. 입력받기
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().split("\n");
// 2. 변수 초기화
let stack = [];
let answer='';
const num = input[0];
// 3. 알고리즘 구현
for (let i = 1; i <= num; i++) {
if (input[i].indexOf("push")>=0) {
let x = input[i].split(' ');
stack.push(x[1]);
continue;
} else {
switch (input[i]) {
case "pop":
if (stack.length) answer+=stack.pop()+'\n';
else answer+="-1"+'\n';
break;
case "size":
answer+=stack.length+'\n'
break;
case "empty":
if (stack.length) answer+="0"+'\n';
else answer+="1"+'\n';
break;
case "top":
if (stack.length) answer+=Number(stack.slice(-1))+'\n';
else answer+="-1"+'\n';
break;
}
}
}
console.log(answer);
자바스크립트는 app.js 파일로 작성하여 저장한다.
입력부분을 보면,
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().split("\n");
node.js에서 fs 모듈을 사용하여 입력을 받는다.
fs모듈의 속도가 빠르지만 fs의 경우 예제 입력 파일에 접근해야 하기 때문에
일부 문제에서는 "런타임 에러 (EACCES)" 형태의 접근권한 오류가 나타납니다. ( ex) 문제 : 14681 사분면 고르기 )
...
일부 문제에서는 시간제한 문제가 있습니다. 이 때 readline을 사용하면 시간초과가 되는 경우도 있습니다.
출처: https://hanch-dev.tistory.com/4 [HanCh_Dev]
백준에서 채점할 때는 리눅스 기반에서 직접 입력을 받지만,
내 로컬에서 코드를 짤 때는 입력예시를 txt파일로 저장해놓고 받아서 쓴다.
매우 편하다😂😂😂
input.txt파일은 app.js 파일과 같은 폴더에 저장한다.
받은 파일을 읽어서 input 어레이에 저장한다.
여러줄이기 때문에 split("\n")으로 나누어 저장했지만, 한 줄 입력이라면 split(" ")으로 적용한다.
let stack = [];
let answer='';
const num = input[0];
console.log()
를 실행하면 시간초과가 발생 하므로, answer에 모두 더했다가 출력은 최종 answer 한 번만 출력한다.indexOf
함수를 사용하여 push가 있는지 판단한다.push 123
과 같이 공백 한 칸을 두고 수가 있기 때문에 split(' ')
으로 나누어, 집어넣을 수를 가져온다.if(stack.length)
로 스택이 비었는지 판단한다. 길이가 0이라면 false, 1이상이라면 true이다.for (let i = 1; i <= num; i++) {
//push인 경우
if (input[i].indexOf("push")>=0) {
let x = input[i].split(' ');
stack.push(x[1]);
continue;
}
// 그 외 경우
else {
switch (input[i]) {
case "pop":
if (stack.length) answer+=stack.pop()+'\n';
else answer+="-1"+'\n';
break;
case "size":
answer+=stack.length+'\n'
break;
case "empty":
if (stack.length) answer+="0"+'\n';
else answer+="1"+'\n';
break;
case "top":
if (stack.length) answer+=Number(stack.slice(-1))+'\n';
else answer+="-1"+'\n';
break;
}
}
}
console.log(answer);
터미널에서
node --version
으로 노드가 설치되어있는지 확인하고,
node app.js
로 실행시켜주면 끝!
스택 자료구조문제인데 입력방식에 당황해서 자바스크립트의 스택을 제대로 활용하지 못한 것 같다......킄... 다른 스택문제는 스택스럽게 풀어봐야겠다.