문제
queue(큐)는 원소가 컨테이너의 한쪽 끝에 삽입되고 다른 쪽에서 추출되는 FIFO(선입선출)로 설계된 컨테이너 어댑터이다.
queue는 원소가 "뒤(rear/back)"로 삽입(push)되고 "앞(front)"에서 제거(pop)된다 .
기본적인 함수로는 아래와 같은 함수들이 있다.
push(): 원소를 뒤(back)에 삽입한다
pop(): 앞(front)에 있는 원소를 제거한다
front(): 앞에 있는 원소를 반환한다
empty(): 비어있으면 true, 아니면 false를 반환한다
size(): 원소의 수를 반환한다
사용법은 아래와 같다.
#include<iostream>
#include<queue>
using namespace std;
int main(){
queue<int>q;
q.push(3);
q.push(5);
q.push(1);
while(!q.empty()){
cout<<q.front()<<"\n";
q.pop();
}
}queue의 자료형은 변경이 가능하여 int가 아닌 double이나 string 혹은 구조체를 사용하는 것도 가능하다.
[문 제]
사람들이 새로 출시되는 최신형 정올폰을 구매하기 위해 줄을 섰다.
입력으로 들어오는 명령어에 따라 적절히 처리하시오.
명령어는 다음과 같다.
wait X : X번 손님이 줄을 섰다. (이미 1,000명의 손님이 줄을 서고 있다면 아무 일도 일어나지 않는다. X번 손님은 눈물을 머금고 터덜터덜 집에 돌아간다)
buy : 줄의 가장 앞에 있는 손님이 정올폰을 구매하고 집에 간다. (기다리고 있던 손님이 없으면 아무 일도 생기지 않는다)
count : 매니저는 총 몇 명이 줄을 서고 있는지 궁금하니 알려주자.
최신형 정올폰의 인기는 상상을 초월하기에 매우 많은 인원이 방문을 하려고 하겠지만 가게의 줄이 너무 길면 안되기에 줄을 서고 있는 인원은 늘 최대 1,000명이 넘지 않아야 한다.
입력
첫 줄에 명령어의 수 N이 입력된다. (
두 번째 줄부터 N줄에 걸쳐 명령어가 입력되며, "wait X" 명령어의 X는 109 이하의 양의 정수이다.
출력
첫 번째 줄에 "count" 명령어가 입력될 때마다 총 몇 명의 인원이 줄 서고 있는지 공백을 기준으로 나누어 출력하시오.
두 번째 줄에는 정올폰을 구매한 손님들 중 번호가 가장 높았던 손님의 번호를 출력하시오. 만약 한 명도 없다면 0을 출력하시오.
예제
10
buy
count
wait 9
wait 32
buy
count
wait 1
wait 2
wait 3
count
0 1 4
9