페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4988

STL - Queue 1s 4MB

문제

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 혹은 구조체를 사용하는 것도 가능하다.

[문 제]

사람들이 새로 출시되는 최신형 정올폰을 구매하기 위해 줄을 섰다.

입력으로 들어오는 명령어에 따라 적절히 처리하시오.

명령어는 다음과 같다.

  1. wait X : X번 손님이 줄을 섰다. (이미 1,000명의 손님이 줄을 서고 있다면 아무 일도 일어나지 않는다. X번 손님은 눈물을 머금고 터덜터덜 집에 돌아간다)

  2. buy : 줄의 가장 앞에 있는 손님이 정올폰을 구매하고 집에 간다. (기다리고 있던 손님이 없으면 아무 일도 생기지 않는다)

  3. count : 매니저는 총 몇 명이 줄을 서고 있는지 궁금하니 알려주자.

최신형 정올폰의 인기는 상상을 초월하기에 매우 많은 인원이 방문을 하려고 하겠지만 가게의 줄이 너무 길면 안되기에 줄을 서고 있는 인원은 늘 최대 1,000명이 넘지 않아야 한다.


입력

첫 줄에 명령어의 수 N이 입력된다. (1 ≤ N ≤ 5*10^5)

두 번째 줄부터 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


출처

klee

로그인해야 코드를 작성할 수 있어요.