[Baekjoon] 백준 15828 Router - c++

재우·2022년 12월 21일
0

Baekjoon

목록 보기
14/21
post-thumbnail

📘 문제

문제링크 : https://www.acmicpc.net/problem/15828 (단계별로 풀어보기 : 큐, 덱)

📝 문제 풀이

해당 문제는 STL에서 제공하는 queue 자료 구조를 사용하여 쉽게 풀 수 있었다.

queue 자료구조 기본 사용법

📌1. 큐 헤더 파일

Queue STL을 사용하기 위해서는 헤더파일을 포함해야 합니다.
queue <데이터 타입> 이름 ; 으로 queue을 선언합니다.

#include <queue> 

queue<int> q;

📌2. 큐 기본 함수

▷ 큐에 데이터 추가하기

queue.push(element)

▷ 큐에 데이터 삭제하기

queue.pop()

▷ 큐의 첫번째 데이터 반환

queue.front()

▷ 큐의 마지막 데이터 반환

queue.back()

▷ 큐의 사이즈 반환

queue.size()

▷ 큐가 비어있는 지 확인

queue.empty()

여기서 우리는 push, pop, front, size 를 사용합니다.

-1 입력 시 : 종료
0 입력 시 : pop 사용
그 외 입력 시 : 입력받은 buffer사이즈와 size()메소드를 사용하여 얻은 queue사이즈를 비교하여
queue 사이즈가 더 작을 시 -> push
queue 사이즈가 더 크거나 같은 시 -> 행동 x

위 처럼 알고리즘을 짜면 금방 해결할 수 있다.

STL 없이 queue 를 설계하려면 배열과 enqueue, dequeue 함수를 만들고 size를 계산하여 enqueue 시 buffer size와 현재 size를 비교한 후 queue에 넣도록 코드를 짠다면 해결할 수 있을 것이다.

💻 소스코드

#include <iostream>
#include <queue>
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;

int main()
{
    fastio;

    int buffer_size, tmp, size;
    cin >> buffer_size;
    queue<int> buffer;

    while (1)
    {
        cin >> tmp;
        if (tmp == -1)
            break;
        else if (tmp == 0)
            buffer.pop();
        else if (buffer.size() < buffer_size)
            buffer.push(tmp);
    }

    size = buffer.size();
    if (size == 0)
        cout << "empty" << "\n";
    for (int i = 0; i < size; i++)
    {
        cout << buffer.front() << "\n";
        buffer.pop();
    }
}

0개의 댓글