#10845

김민성·2023년 5월 1일
0

Baekjoon

목록 보기
3/37

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

명령은 총 여섯 가지이다.

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

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

예제 입력 1

15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

예제 출력 1

1
2
2
0
1
2
-1
0
1
-1
0
3

백준에 제출할 때에는,


const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

class Queue { //this로 접근, 조작, 호출
    constructor() {
        this.queue = []; 
    }

    push(value) { //push X: 정수 X를 큐에 넣는 연산이다.
        this.queue.push(value);
    }

    pop() { //pop: 큐에서 가장 앞에 있는 정수를 빼고, 
        //그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
        return this.queue.length ? this.queue.shift() : -1; //삼항연산자
    } //this.queue.length->큐의 길이 가져오기

    size() { //size: 큐에 들어있는 정수의 개수를 출력한다.
        return this.queue.length;
    }

    empty() { //empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
        return this.queue.length === 0 ? 1 : 0; //삼항연산자
    }

    front() { //front: 큐의 가장 앞에 있는 정수를 출력한다. 
        //만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
        return this.queue.length ? this.queue[0] : -1; //삼항연산자
    }

    back() { //back: 큐의 가장 뒤에 있는 정수를 출력한다. 
        //만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
        return this.queue.length ? this.queue[this.queue.length - 1] : -1; //삼항연산자
    }
}

const queue = new Queue();
const commandNum = parseInt(input[0]);
let output = "";

for (let i = 1; i <= commandNum; i++) {
    const command = input[i].split(" ");
    switch (command[0]) {
        case "push":
            queue.push(parseInt(command[1]));
            break;
        case "pop":
            output += queue.pop() + "\n";
            break;
        case "size":
            output += queue.size() + "\n";
            break;
            case "empty":
                output += queue.empty() + "\n";
                break;
            case "front":
                output += queue.front() + "\n";
                break;
            case "back":
                output += queue.back() + "\n";
                break;
        }
    }
    
console.log(output.trim());

처음 짜고 시간초과가 뜬 코드.

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

class Queue { //this로 접근, 조작, 호출
    constructor() {
        this.queue = []; 
    }

    push(value) { //push X: 정수 X를 큐에 넣는 연산이다.
        this.queue.push(value);
    }

    pop() { //pop: 큐에서 가장 앞에 있는 정수를 빼고, 
        //그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
        return this.queue.length ? this.queue.shift() : -1; //삼항연산자
    } //this.queue.length->큐의 길이 가져오기

    size() { //size: 큐에 들어있는 정수의 개수를 출력한다.
        return this.queue.length;
    }

    empty() { //empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
        return this.queue.length === 0 ? 1 : 0; //삼항연산자
    }

    front() { //front: 큐의 가장 앞에 있는 정수를 출력한다. 
        //만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
        return this.queue.length ? this.queue[0] : -1; //삼항연산자
    }

    back() { //back: 큐의 가장 뒤에 있는 정수를 출력한다. 
        //만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
        return this.queue.length ? this.queue[this.queue.length - 1] : -1; //삼항연산자
    }
}

const queue = new Queue();
let commandNum; //첫 번쨰에 입력하는 정수. 명령어의 개수

rl.on("line", function (line) {
    if (!commandNum) {
        commandNum = parseInt(line);
        return;
    }

    const command = line.split(" "); //명령어와 명령어와 사용되는 값을 공백으로 분리
    switch (command[0]) {//위에서 공백으로 분리했으므로 0번째 인덱스는 명령어,
        case "push":
            queue.push(parseInt(command[1]));//1번쨰 인덱스는 입력 값인데, parseInt를 써 정수로 변환
        break;
        case "pop":
            console.log(queue.pop());
        break;
        case "size":
            console.log(queue.size());
        break;
        case "empty":
            console.log(queue.empty());
        break;
        case "front":
            console.log(queue.front());
        break;
        case "back":
            console.log(queue.back());
        break;
    }
    });

profile
다양한 활동을 통해 인사이트를 얻는 것을 즐깁니다. 저 또한 인사이트를 주는 사람이 되고자 합니다.

0개의 댓글

관련 채용 정보