https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
배운점
배열에 값을 추가하는 함수
- push : 배열의 맨 뒤의 값을 추가
- unshift : 배열의 맨 앞에 값을 추가
배열의 값을 제거하는 함수
- pop : 배열의 맨 끝에 값을 제거한다.
- shift : 배열의 맨 앞의 값을 제거한다.
console.log()을 여러번 호출하는 것은 시간 초과의 원인이 된다.
또한 기존에는 forEach 문을 사용했는데 이 또한 시간초과가 났다.
result.forEach((v) => {
console.log(v);
});
result 배열을 하나 만들어서 result.join('\n')을 사용하자.
console.log(result.join("\n"));
근데 왜 속도 차이가 나는 것일까?
전자 경우에는 forEach문을 돌면서
console.log(1);
console.log(2);
다음과 같은식으로 console.log 가 계속 반복되어 호출된다.
후자의 경우에는
배열의 원소들을 연결하여 하나의 값으로 만들기때문에
console.log('1\n2\n3');
다음 처럼 cosole.log가 한번 호출된다.
문제풀이
const fs = require("fs");
BOJkey = true;
var input = fs
.readFileSync(BOJkey ? "./자바스크립트로/10828/input.txt" : "./dev/stdin")
.toString()
.trim()
.split("\n");
const len = input.shift();
let stack = [];
let result = [];
input.forEach((item, index) => {
let arr = item.split(" ");
switch (arr[0]) {
case "push":
stack.push(arr[1]);
break;
case "pop":
if (stack.length == 0) {
result.push("-1");
} else {
result.push(stack.pop());
}
break;
case "size":
result.push(stack.length);
break;
case "empty":
if (stack.length == 0) {
result.push("1");
} else {
result.push("0");
}
break;
case "top":
if (stack.length == 0) {
result.push("-1");
} else {
result.push(stack[stack.length - 1]);
}
break;
}
});
console.log(result.join("\n"));
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
프로그래머스/JS 신고결과받기 (2) (0) | 2022.06.13 |
---|---|
프로그래머스/JS 신고결과받기 (1) (0) | 2022.06.13 |
백준/JS 10926 (0) | 2022.06.12 |
백준/JS 1000 (0) | 2022.06.12 |
자바스크립트 코테 문법 (0) | 2022.05.29 |