문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다
접근
명령의 수를 입력받아 그만큼 반복문을 돌리며, 조건문을 이용하여 모든 명령에 대해 반응할 수 있도록 코드를 작성한다.
코드
#include <iostream>
#include <queue>
using namespace std;
int main(){
cin.tie(NULL);
ios_base::sync_with_stdio(false);
queue<int> q;
int n, num; cin >> n;
string order;
while(n--){
cin >> order;
if(order == "push"){
cin >> num;
q.push(num);
}
else if(order == "pop"){
if(q.empty())
cout << -1 << "\n";
else{
cout << q.front() << "\n";
q.pop();
}
}
else if(order == "size"){
cout << q.size() << "\n";
}
else if(order == "empty"){
if(q.empty())
cout << 1 << "\n";
else
cout << 0 << "\n";
}
else if(order == "front"){
if(q.empty())
cout << -1 << "\n";
else
cout << q.front() << "\n";
}
else{
if(q.empty())
cout << -1 << "\n";
else
cout << q.back() << "\n";
}
}
}
풀이
정수를 저장하는 큐 q를 선언한다.
정수형 변수 n과 num을 선언하고 n에 명렬의 개수를 받는다.
명령을 입력받을 문자열형 변수 order을 선언한다.
n번만큼 while문을 돌리며 명령을 order에 입력받아 다음과 같이 명령에 따른 행동을 취하게 한다.
- push : 큐에 넣을 정수를 num에 입력받고 이를 q에 넣는다.
- pop : 큐가 비어있으면(empty함수를 이용하여 확인한다. empty함수는 비어있으면 true, 아니면 false를 리턴한다.) -1을 출력하고,
아니라면 제일 앞의 원소를 front 함수를 이용하여 출력한 뒤 pop 함수를 이용하여 제거한다.
- size : 큐의 크기를 size함수를 이용하여 출력한다.
- empty : empty 함수를 이용하여 확인하고 비어있으면 1을, 아니면 0을 출력한다.
- front : 큐가 비어있으면 -1을 출력하고, 아니라면 제일 앞의 원소를 front 함수를 이용하여 출력한다.
- back : 큐가 비어있으면 -1을 출력하고, 아니라면 제일 뒤의 원소를 back 함수를 이용하여 출력한다.
알아두자!
cin은 콘솔에서 입력을 받는데, 공백을 기준(줄 바꿈 기준 아님)으로 삼아 입력받는다.
큐(queue)는 컴퓨터의 기본적인 자료구조 중 하나로 FIFO 구조이다(first in first out. 선입선출). <queue> 헤더파일에 선언되어 있다.
'Algorithm > c++' 카테고리의 다른 글
[c++/백준 2164] 카드2 (0) | 2023.01.10 |
---|---|
[c++/백준 10828] 스택 (1) | 2023.01.09 |
[c++/백준 10825] 국영수 (0) | 2023.01.09 |
[c++/백준 10814] 나이순 정렬 (0) | 2023.01.07 |
[c++/백준 11650] 좌표 정렬하기 (0) | 2023.01.07 |