문제링크 : https://www.acmicpc.net/problem/15828 (단계별로 풀어보기 : 큐, 덱)
해당 문제는 STL에서 제공하는 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();
}
}