https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
- 사용언어 : node.js
- 알고리즘 : 자료구조, 스택
- Solved.ac Tier : Siver IV
소마 준비를 위해 알고리즘 공부를 시작하려 한다. 기초 자료구조부터 탄탄하게 다져갈 생각이다.
node.js 코드
1. 문제 정리
기존에 우리가 쉽게 아는 스택과 같은 문제이다. 이미 C#과 C로 풀어 본 적 있는 문제이지만, 주 언어가 된 JS엔 자료구조가 없기 때문에 직접 구현해야 한다. 따라서 앞으로 상위 문제를 풀 때 필요한 자료구조인 스택, 큐, 덱 같은 기초부터 시작해야 한다.
스택은 LIFO 즉 후입 선출이다. 마지막 들어온 데이터가 제일 먼저 나가는 방식이다.
push가 들어오면 Stack 클래스의 s_push를 사용하여 기본 함수인 push로 생성자 함수에서 받은 arr에 넣어 주었다.
s_push(num){
this.arr.push(num);
}
pop이 들어오면 Stack 클래스의 s_pop을 사용하여 기본 함수인 pop을 사용하여 생성자 함수에서 받은 arr에서 빼주었다. 만약 뺄 데이터가 없다면 -1을 리턴하도록 만들었다.
s_pop(){
let data = this.arr.pop();
if(!data) return -1
return data;
}
empty가 들어오면 Stack 클래스의 s_empty를 사용하여 생성자 함수에서 받은 arr의 길이를 확인 한 뒤 0보다 크면 0을 리턴해주고 아니라면 1을 리턴해 주었다.
s_empty(){
if(this.arr.length > 0){
return 0;
}
else{
return 1;
}
}
top이 들어오면 Stack 클래스의 s_top을 사용하여 생성자 함수에서 받은 arr의 길이 -1 index에 값이 있으면 그 값을 리턴하고 아니라면 -1을 리턴 해 주었다.
s_top(){
if(!this.arr[this.arr.length - 1]) return -1;
return(this.arr[this.arr.length - 1])
}
size가 들어오면 Stack 클래스의 s_size()를 사용하여 생성자 함수에서 받은 arr의 길이를 리턴 해 주었다.
s_size(){
return this.arr.length;
}
2. 완성 코드
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'ans.txt';
let [N, ...inputs] = require('fs').readFileSync(filePath).toString().trim().split("\n");
class Stack{
constructor(arr){
this.arr = arr;
}
s_push(num){
this.arr.push(num);
}
s_pop(){
let data = this.arr.pop();
if(!data) return -1
return data;
}
s_empty(){
if(this.arr.length > 0){
return 0;
}
else{
return 1;
}
}
s_top(){
if(!this.arr[this.arr.length - 1]) return -1;
return(this.arr[this.arr.length - 1])
}
s_size(){
return this.arr.length;
}
}
const arr = [], ans = [];
let stack = new Stack(arr);
inputs.map((value)=>{
value = value.trim().split(" ");
if(value[0] == "push"){
stack.s_push(parseInt(value[1]));
}
else if(value[0] == "top"){
ans.push((stack.s_top()));
}
else if(value[0] == "size"){
ans.push(stack.s_size());
}
else if(value[0] == "pop"){
ans.push(stack.s_pop());
}
else if(value[0] == "empty"){
ans.push(stack.s_empty());
}
})
console.log(ans.join("\n"))
'백준 알고리즘 > Lang-node.js' 카테고리의 다른 글
[백준/node.js] 2164 카드2 (0) | 2023.01.08 |
---|---|
[백준/node.js] 10845 큐 (0) | 2023.01.08 |
[백준/node.js] 11656 접미사 배열 (0) | 2023.01.04 |
[백준/node.js] 10816 숫자 카드 2 (0) | 2023.01.04 |
[백준/node.js] 10867 중복 빼고 정렬하기 (0) | 2023.01.03 |