[백준]10828번 - 스택 (node.js)

지리·2023년 4월 19일
0

알고리즘

목록 보기
8/27

문제

10282번 스택

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

스택

스택(stack)이란 쌓아놓은 더미를 뜻하며 자료구조의 한 종류로 후입선출(Last in First out, LIFO)방식을 사용하는 자료구조이다.

코드 - 1

var fs = require('fs');
const [N, ...array] = fs.readFileSync('/dev/stdin').toString().split('\n');

function solution(N, array) {
	let stack = [];

	for (let i = 0; i < N; i++) {
		const [order, number] = array[i].split(' ');
		switch (order) {
			case 'push':
				stack.push(number);
				break;
			case 'pop':
				console.log(stack.pop() || -1);
				break;
			case 'size':
				console.log(stack.length);
				break;
			case 'empty':
				console.log(stack.length > 0 ? 0 : 1);
				break;
			case 'top':
				console.log(stack[stack.length - 1] || -1);
				break;
		}
	}
}

solution(N, array);

결과

시간 초과...;
왜 시간초과가 나왔는지 문제로 검색한 결과 console.log가 시간을 잡아먹는걸 알게 되었다...
그리고 for문안에 switch/case문이 아니라, 객체를 만들어야 키값을 이용해 맞는 연산 하나만 실행되는것도 알게 되었다...(switch/case를 할경우 위에서 아래로 맞는 case를 찾게 되므로)

코드 - 2

var fs = require('fs');
const [N, ...array] = fs.readFileSync('/dev/stdin').toString().split('\n');

function solution(N, array) {
	let stack = [];
	let answer = [];
	const orders = {
		push: (number) => {
			stack.push(number);
		},
		pop: () => {
			const pop = stack.pop();
			pop ? answer.push(pop) : answer.push(-1);
		},
		size: () => {
			answer.push(stack.length);
		},
		empty: () => {
			stack.length > 0 ? answer.push(0) : answer.push(1);
		},
		top: () => {
			const top = stack[stack.length - 1];
			top ? answer.push(top) : answer.push(-1);
		},
	};

	for (let i = 0; i < N; i++) {
		const [order, number] = array[i].split(' ');
		orders[order](number);
	}

	console.log(answer.join(`\n`));
}

solution(N, array);

결과

성공 🎉

메모리 12508KB
시간 208ms

profile
공부한것들, 경험한 것들을 기록하려 노력합니다✨

0개의 댓글