코딩테스트 연습
백준 10828 - 스택
gurwhddl
2023. 4. 17. 16:23
https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
스택을 push, pop 없이 구현해봄
const fs = require("fs");
let input = fs
.readFileSync("./test.txt")
.toString()
.trim()
.split("\n")
.map((v) => v.split(" "));
const arr = [];
let size = 0;
let result = "";
for (let i of input) {
const command = i[0];
if (command === "push") {
arr[size] = parseInt(i[1]);
size++;
continue;
}
if (command === "pop") {
if (size === 0) {
result += -1 + "\n";
continue;
}
result += arr[size - 1] + "\n";
size--;
}
if (command === "size") {
result += size + "\n";
continue;
}
if (command === "empty") {
if (size === 0) {
result += 1 + "\n";
} else {
result += 0 + "\n";
}
}
if (command === "top") {
if (size === 0) {
result += -1 + "\n";
} else {
result += arr[size - 1] + "\n";
}
continue;
}
}
console.log(result);
스택은 들어간 순서대로 쌓이기 때문에 내가 값을 넣을거라면 기존 값들 제일 뒤에 위치해야 함 - 기존 값이 몇개가 있는지를 알고 있어야함
arr - 스택 구현할 배열 / size - 스택에 몇개있는지?(배열 길이 체크용)
size는 0으로 시작해서 push 할때마다 arr[size] = n , size ++
pop은 size --만 해주면 됨
- 값은 여전히 남아있겠지만 어차피 size의 값이 하나 줄어들었기 때문에 pop 된것처럼 행동하게 됨
size는 말그대로 size이고
empty도 말그대로 size 값만 체크해주면 되고
top은 제일 마지막 값 = arr[size-1] 의 값을 리턴해주면 됨
*출력값이 매우 길기 때문에 결과마다 console.log 해주면 시간초과남 - result라는 배열에 문자열로 다 저장해놨다가 한번에 출력
*스택은 제일 뒤에 위치하는 원소 빼고는 나머지 확인은 원칙적으로는 불가능 - 배열을 이용하기 때문에 사실 가능은 하지만 원칙적으로는 불가능