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