728x90
📌 문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
📌 입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
📌 입출력 예
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
📌 예제 입력 및 출력
📌 풀이
알아야 하는 것
- 백준에서 Node.js를 사용해 문제를 풀 경우 console.log를 최대한 적게 써야 한다. (참고)
- 처음에 분명 맞는 답이 나왔고 VSC나 콘솔에서도 문제가 없는데 자꾸만 시간초과가 떴다. 알고 보니 for문 안의 console.log가 시간을 많이 잡아 먹어서 그런 거였다. 출력을 해야 할 때마다 console.log를 찍어서 답을 출력했는데, 이렇게 하면 구조를 완전히 바꿔야 했다.
구할 것
- 실제로 연산을 진행할 stack 배열과 바로 정답을 출력할 answer 배열 2개를 만들었다.
- 정수 X를 스택에 넣을 push X의 경우 "push 123" 이런 식으로 입력값이 들어오기 때문에, for문을 돌았을 때 push를 includes 하고 있다면 공백을 기준으로 split해서 ["push", "123"]의 1번째 인덱스를 push하도록 했다.
- case문으로 써도 됐을 것 같은데 그건 손에 익지가 않아서 그냥 조건에 맞게 if-else if문으로 처리하고 이항연산자로 세부 조건을 설정했다.
- 예컨대 top의 경우 스택의 가장 위의 정수를 출력해야 하는데 스택에 정수가 없다면 === 스택의 length가 0이라면 -1을 answer에 push하고, 그렇지 않다면 스택의 가장 우측에 있는 값을 answer에 push 하는 코드를 짰다. empty, pop도 이와 비슷하다. size도 stack의 length를 answer에 push하면 됐다.
- 정답률이 37%길래 어려운 줄 알았는데 생각보다 너무 쉽게 풀려서 내가 잘못 한 건줄 알았다... 왜지?
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const num = input[0].split(" ");
let stack = [];
let answer = [];
for (let i = 1; i < input.length; i++) {
if (input[i].includes("push")) {
let pushNum = input[i].split(" ");
stack.push(Number(pushNum[1]));
} else if (input[i] === "top") {
stack.length === 0 ? answer.push(-1) : answer.push(stack[stack.length - 1]);
} else if (input[i] === "size") {
answer.push(stack.length);
} else if (input[i] === "empty") {
stack.length === 0 ? answer.push(1) : answer.push(0);
} else if (input[i] === "pop") {
stack.length === 0 ? answer.push(-1) : answer.push(stack.pop());
}
}
console.log(answer.join("\n"));
728x90
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 프로그래머스 코딩테스트 레벨 3 : 가장 먼 노드 (0) | 2023.07.05 |
---|---|
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 타겟 넘버 (0) | 2023.07.04 |
[JavaScript] 백준 코딩테스트 : 비밀번호 찾기 (0) | 2023.06.28 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : H-Index (0) | 2023.06.27 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 가장 큰 수 (0) | 2023.06.27 |