섭스토리
백준 10828번 <스택> 본문

백준 10828번 <스택>
실버 4
https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
const fs = require('fs');
const [N, ...input] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let array = [];
for (let i of input) {
if (i.indexOf('push') !== -1) {
array.push(i.split(" ")[1]);
} else if (i.indexOf('pop') !== -1) {
console.log(array.length == 0 ? -1 : array.pop());
} else if (i.indexOf('size') !== -1) {
console.log(array.length);
} else if (i.indexOf('empty') !== -1) {
console.log(array.length == 0 ? 1 : 0);
} else if (i.indexOf('top') !== -1) {
console.log(array.length == 0 ? -1 : array[array.length - 1]);
}
}
처음에 작성했던 코드입니다.
자바스크립트로 스택을 구현하는 것은 pop()과 push() 메서드가 있기 때문에 크게 어렵지 않습니다!
하지만 계속해서 시간초과가 나더라구요..ㅜㅠ
그래서 찾아보니깐 console.log()가 시간을 많이 잡아먹는다는 것을 알게되었습니다.
그래서 다른 분이 작성하신 코드를 참고해서 배열을 선언하고 그 배열에 쌓아놓은 다음에 마지막에 출력을 하니
맞았습니다!
let array = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let stack = [];
let result = [];
let len = array.shift();
for (let i = 0; i < len; i++) {
switch (array[i]) {
case 'pop':
result.push(stack.pop() || -1);
break;
case 'size':
result.push(stack.length);
break;
case 'empty':
result.push(stack[0] ? 0 : 1);
break;
case 'top':
result.push(stack[stack.length - 1] || -1);
break;
default:
stack.push(array[i].split(" ")[1]);
break;
}
}
console.log(result.join('\n'));
위 문제처럼 문자열이 다양하게 들어오는 조건문 같은 경우에는 switch 조건문을 사용하는 게 더 편해보이더라구요.
break;를 일일히 써주어야 하는 점만 지켜준다면 유용할 것 같습니다.
앞으로 시간초과 때문에 풀리지 않는 문제가 있다면
console.log()를 최대한 사용하지 않는 쪽으로 코드를 짜봐야 할 것 같아요!
'백준 풀이 🍪' 카테고리의 다른 글
백준 3273번 <두 수의 합> (0) | 2022.09.28 |
---|---|
백준 9012번 <괄호> (0) | 2022.08.26 |
백준 10814번 <나이순 정렬> (0) | 2022.08.25 |
백준 11866번 <요세푸스 문제 0> (0) | 2022.08.25 |
백준 4949번 <균형잡힌 세상> (0) | 2022.08.19 |