문제
https://www.acmicpc.net/problem/10828
정답
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().split("\n");
class Stack {
#array;
constructor(array = []) {
this.#array = array;
}
push(value) {
return this.#array.push(value);
}
pop() {
if (this.#array.length === 0) {
return -1;
}
return this.#array.pop();
}
size() {
return this.#array.length;
}
empty() {
// 스택이 비어있으면 1, 아니면 0 출력
return this.#array.length === 0 ? 1 : 0;
}
// 스택의 가장 위에 있는 정수를 출력한다.
// 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
top() {
if (this.#array.length === 0) {
return -1;
} else {
return this.#array[this.#array.length - 1];
}
}
}
function solution(input) {
// 명령어 개수
const testCount = input[0];
const stack = new Stack();
// 스택 결과를 담을 배열
const results = [];
for (let i = 1; i <= testCount; i++) {
const command = input[i].split(" ");
switch (command[0]) {
case "push":
stack.push(Number(command[1]));
break;
case "pop":
results.push(stack.pop());
break;
case "size":
results.push(stack.size());
break;
case "empty":
results.push(stack.empty());
break;
case "top":
results.push(stack.top());
break;
default:
throw new Error(`알 수 없는 명령어: ${command[0]}`);
}
}
console.log(results.join("\n"));
}
solution(input);
배열로 직접 문제를 해결할 수도 있지만, 모던 자바스크립트 Deep Dive 책에서 스택 구현 예시를 보고 클래스를 활용한 방식을 적용했다.
코드 설명
스택의 기본 연산을 클래스 형태로 정의하여 다른 코드와 독립성 있게 하였다.
class Stack {
#array; // private 배열로 스택 요소 관리
constructor(array = []) {
this.#array = array;
}
// 스택에 값을 추가
push(value) {
return this.#array.push(value);
}
// 스택에서 값을 제거하고 반환. 비어있으면 -1 반환
pop() {
if (this.#array.length === 0) {
return -1;
}
return this.#array.pop();
}
// 스택의 현재 크기를 반환
size() {
return this.#array.length;
}
// 스택이 비어있는지 확인: 비어있으면 1, 아니면 0 반환
empty() {
return this.#array.length === 0 ? 1 : 0;
}
// 스택의 가장 위 값을 반환. 비어있으면 -1 반환
top() {
if (this.#array.length === 0) {
return -1;
}
return this.#array[this.#array.length - 1];
}
}
주어진 명령어(push, pop, size, empty, top) 을 처리하기 위해 solution 함수를 작성했다. 입력으로 명령어 목록을 받아 각 명령어를 처리하고 결과를 출력한다.
function solution(input) {
// 명령어 개수
const testCount = input[0];
const stack = new Stack();
// 스택 결과를 담을 배열
const results = [];
for (let i = 1; i <= testCount; i++) {
const command = input[i].split(" ");
switch (command[0]) {
case "push":
stack.push(Number(command[1]));
break;
case "pop":
results.push(stack.pop());
break;
case "size":
results.push(stack.size());
break;
case "empty":
results.push(stack.empty());
break;
case "top":
results.push(stack.top());
break;
default:
throw new Error(`알 수 없는 명령어: ${command[0]}`);
}
}
console.log(results.join("\n"));
}
'코딩문제풀기' 카테고리의 다른 글
[프로그래머스/12931] 자릿수 더하기 (0) | 2024.07.18 |
---|---|
[프로그래머스] 두 수의 차 (0) | 2024.06.05 |
[백준/10430] 나머지 (0) | 2024.06.02 |
[백준 | 1874 | 자바스크립트] 스택 수열 (0) | 2024.05.26 |
[백준] 2753 | 윤년 | Javacsript (0) | 2024.05.11 |