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

#8074

Tutorial : STL Queue 1초 512MB

문제

이번에는 STL Queue 를 학습해 보자.

Queue 를 선언하는 방법은 아래와 같다.


#include <queue>

using namespace std;

queue <int> q;


위 코드에서, <int> 는 큐에 담을 자료형을 의미하고, q 는 그 큐의 이름이다. ( 큐 이름은 자유롭게 설정 가능 )

즉, 이 예시에선 q 는 int 를 담는 큐가 된다.

※ 실제 문제에서 사용하는 큐는 구조체를 담는 경우가 많다.

이 문제에서는 큐에 구조체를 담는 연습을 해볼 것이다.


struct Data{

int x, y, z;

};

queue <Data> qq;

Data 는 (x좌표, y좌표, z좌표) 를 담는 구조체이고, qq 는 Data 구조체를 담을 수 있는 큐인 것이다.

이제 본격적으로 STL Queue 의 함수들을 알아보자.


함수 1 : empty()

사용 예시 : if ( qq.empty() == true )...

STL Stack 과 마찬가지로 STL Queue 도 empty() 함수가 있다.

비어있으면 true, 안 비어있으면 false 를 return 한다.


함수 2 : push()

사용 예시 : qq.push( { 1, 2, 4 } );

push() 함수는 큐의 맨 뒤에 원소를 삽입하는 함수다.

위 코드처럼 { 1, 2, 4 } 를 push() 함수에 넣어주면, ( x = 1, y = 2, z = 4 ) 인 Data 구조체가 qq 에 삽입되는 것이다.

( 반드시 구조체에 선언된 변수 순서대로, { 중괄호 } 를 씌워서 넣어주자! )


함수 3 : pop()

사용 예시 : qq.pop();

pop() 함수는 큐의 맨 앞 원소(front)를 삭제하는 함수다.

삭제만 할 뿐, 삭제된 원소를 알려주지는 않는다.

STL Stack 과 마찬가지로, 큐가 비어있는데 pop() 을 호출하면 런타임 에러가 난다. ( 반드시 미리 empty() 함수를 통해 비어있는지부터 확인하자. )


함수 4 : front()

사용 예시 : Data f = qq.front(); 또는 if ( qq.front().y == 2 ) ...

front() 함수는 큐의 맨 앞 원소(front)의 값을 알려주는 함수다. ( 값을 알려주기만 할 뿐, 삭제하지 않는다. )

위 코드에서는 qq 가 Data 구조체를 담는 큐였다.

따라서 qq.front() 는 Data 구조체를 return 할 것이므로, Data f 를 선언하여 담아준 것이다.

f.x, f.y, f.z 를 통해 f 의 x, y, z 값을 알 수 있다.

front() 함수도 큐가 비어있는데 호출되면 런타임 에러가 난다. ( 반드시 미리 empty() 함수를 통해 비어있는지부터 확인하자. )


함수 5 : size()

사용 예시 : if ( qq.size() == 0 ) ... 또는 int s = qq.size();

size() 함수는 STL Stack 과 마찬가지로, 큐의 원소 개수를 알려준다.

큐가 비어있다면 size() 함수는 0 을 return 할 것이다.


이제 위 5가지 함수를 이용하여 아래 문제를 풀어보자.

<처리조건>

주어진 명령은 다음의 4가지이다.

명령 1 : "i x y z" 는 (x, y, z) 구조체를 큐에 삽입한다. x, y, z 는 모두 int 범위의 정수다.

명령 2 : "o" 는 큐의 맨 앞 구조체를 삭제 후, 그 구조체의 x, y, z 값을 공백으로 구분하여 출력한다.

만약 큐가 비어있었다면, "empty" 를 출력한다.

명령 3 : "c" 는 큐에 담겨있는 구조체의 개수를 출력한다.

명령 4 : "z a" 는 큐의 맨 앞 구조체의 z 값이 a 라는 정수와 일치하는지를 출력한다.

일치하면 "yes"를 출력하고, 큐가 비어있었거나 일치하지 않으면 "no" 를 출력한다.


입력

첫 줄에 N이 주어진다. N은 주어지는 명령의 수이다. (1≤N≤10,000)

둘째 줄부터 N+1줄까지 N개의 명령이 주어지는데, 한 줄에 하나씩 주어진다.


출력

출력을 요구하는 명령에 대한 출력 값을 한 줄에 하나씩 출력한다.

출력 내용이 하나도 없는 경우는 주어지지 않는다.


예제1

입력
18
o
z 36901969
c
i 42323453 57112519 4814100
i 4643856 67128971 42927065
z 4814100
c
z 4814100
o
z 75068631
c
z 42927065
z 93403458
z 30337753
i 14399968 2553408 64342658
o
i 4062724 80834965 31516244
c
출력
empty
no
0
yes
2
yes
42323453 57112519 4814100
no
1
yes
no
no
4643856 67128971 42927065
2

출처

@againalgo

역링크 공식 문제집만