문제 설명
문제 링크: http://www.acmicpc.net/problem/18258
풀이
문제에서는 큐(queue)를 구현해서 문제를 풀라고 되어있지만, std::queue 클래스를 사용해서 문제를 풀었다.
문자열을 읽어서 그 문자열에 따라 std:: queue 클래스의 각 기능을 사용하면 간단히 처리된다.
한번 큐(queue)를 구현해 보라는 문제인 거 같다.
나머지 글도 대부분 queue 자료 구조와 std::queue 클래스 사용법에 대하여 적을 생각이다.
큐(queue)는 컨테이너의 한 종류로서 큐에 맨 먼저 입력된 데이터가 먼저 출력될 수 있는 자료 구조입니다.
맨 먼저 입력된 데이터가 먼저 출력되어야 하는 FIFO (First Input First Out) 구조로서, 자료 접근에 제한된 기능을 가집니다.
이런 구조는 입력된 순서대로 처리하는 것이 중요한 기능을 구현할 때 많이 고려됩니다.
프린트의 출력이나, 프로세스 관리 등이 있습니다.
std::queue 클래스를 사용하려면 다음 헤더를 포함해야 합니다.
#include <queue>
std::queue 클래스의 멤버 함수는 다음과 같습니다.
함 수 | 설 명 | ||||||||
empty | 스택이 비었는지 검사합니다. 비었으면 true를 리턴합니다. | ||||||||
pop | 큐의 가장 앞에 있는 데이터를 제거합니다. | ||||||||
push | 큐의 가장 끝에 데이터를 추가합니다. | ||||||||
size | 멤버의 개수를 리턴합니다. | ||||||||
front | 큐의 가장 앞에 있는 멤버의 참조를 리턴합니다. | ||||||||
back | 큐의 가장 뒤에 있는 멤버의 참조를 리턴합니다. |
front, back 멤버 함수를 호출 시 가장 앞에 그리고 가장 뒤에 있는 멤버의 참조(reference)를 리턴하므로, 큐가 비어있으면 오류가 발생합니다.
이를 방지하기 위해 empty 함수 같은 테스트를 거쳐야 합니다.
queue<int> que;
if ( !que.empty()){
int f = que.front();
int b = que.back();
}
마지막으로, 그냥 cin 객체를 사용해서 입력받으면 "시간제한"에 걸립니다.
그래서 main함수 시작 시, 두 줄을 추가했습니다.
ios::sync_with_stdio(false); // C runtime library와 동기화 제거
cin.tie(NULL); // cout과 동기화 제거
소스 코드
#include <iostream>
#include <queue>
using namespace std;
int main(){
ios::sync_with_stdio(false); // C runtime library와 동기화 제거
cin.tie(NULL); // cout과 동기화 제거
int N;
cin >> N;
string cmd;
int num;
queue<int> que;
for(int i=0; i < N; i++){
cin >> cmd;
if ( cmd == "push"){
cin >> num;
que.push(num);
}
else if ( cmd == "pop" ){
if ( que.size() == 0 ) num = -1;
else{
num = que.front();
que.pop();
}
cout << num << "\n";
}
else if ( cmd == "size"){
num = que.size();
cout << num << "\n";
}
else if ( cmd == "empty"){
num = que.empty();
cout << num << "\n";
}
else if ( cmd == "front"){
if ( que.size() == 0 ) num = -1;
else{
num = que.front();
}
cout << num << "\n";
}
else if ( cmd == "back"){
if ( que.size() == 0 ) num = -1;
else{
num = que.back();
}
cout << num << "\n";
}
}
return 0;
}
'문제 풀이 > 백준 (BOJ)' 카테고리의 다른 글
[백준/BOJ] 12789번: 도키도키 간식드리미 - C++ 문제 풀이 (0) | 2024.04.26 |
---|---|
[백준/BOJ] 24511번: queuestack - C++ 문제 풀이 (0) | 2024.04.24 |
[백준/BOJ] 28278번 : 스택 2 ( Stack 자료 구조 사용하기 ) - C++ 문제 풀이 (0) | 2024.04.23 |
[백준/BOJ] 17103번: 골드바흐 파티션 ( 에라토스테네스의 체 사용법 ) - C++ 문제 풀이 (0) | 2024.04.20 |
[백준/BOJ] 4134번: 다음 소수 ( 주어진 수에 가장 가까운 소수 찾기 ) - C++ 문제 풀이 (0) | 2024.04.19 |