-
[백준/알고리즘기초1] 자료구조1. 10828번 스택(JavaScript)🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/💛 백준 2021. 10. 10. 10:42
문제
https://www.acmicpc.net/problem/10828
첫번째 풀이 : 시간초과
코드는 아래와 같았다.
철저히 .. 문제를 코드로 구현한 .. 수준..ㅋ
const fs = require('fs'); const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n'); const N = parseInt(input.shift(), 10); let stack = []; for (let i = 0; i < N; i++) { let command = input[i].split(' '); if (command[0] === 'push') { stack.push(Number(command[1])); } else if (command[0] === 'top') { if (stack.length === 0) { console.log(-1); } else { console.log(stack[stack.length - 1]); } } else if (command[0] === 'size') { console.log(stack.length); } else if (command[0] === 'empty') { if (stack.length === 0) { console.log(1); } else { console.log(0); } } else if (command[0] === 'pop') { if (stack.length === 0) { console.log(-1); } else { const number = stack.pop(); console.log(number); } } }
두번째 풀이 : 성공
출력을 각각 명령어일때마다 하면 시간초과가 생기는 것 같다.
한 곳에 출력할 것들을 담아놓은다음, \n을 이용해서 출력해야 성공한다.
코드는 아래와 같았다.
const fs = require('fs'); const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n'); const N = parseInt(input.shift(), 10); let stack = []; let answer = []; for (let i = 0; i < N; i++) { switch (input[i]) { case 'pop': answer.push(stack.pop() || -1); break; case 'top': answer.push(stack[stack.length - 1] || -1); break; case 'size': answer.push(stack.length); break; case 'empty': answer.push(stack[0] ? 0 : 1); break; default: stack.push(Number(input[i].split(' ')[1])); break; } } console.log(answer.join('\n'));
우선 if else if 로 난잡한 코드를 switch, case로 깔끔하게 정리했다.
그리고 push의 경우에만 split하면 되므로 가장 마지막 default에서 작업한다!
정말 깔끔해졌다!
'🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 💛 백준' 카테고리의 다른 글
[백준/알고리즘기초1] 자료구조1. 9012번 괄호(JavaScript) (1) 2021.10.12 [백준/그래프탐색] 1743번. 음식물피하기(JavaScript) (0) 2021.08.30 [백준/완전탐색] 5618번. 공약수(JavaScript) (0) 2021.08.02 [백준/최소 스패닝 트리] 1197번. 최소 스패닝 트리, 1922번 네트워크 연결(Python) (0) 2021.07.30 [백준/우선순위큐,힙] 2696번. 중앙값 구하기(Python) (0) 2021.07.28