minimimi

[백준] 10845 큐 본문

프로그래밍 공부/알고리즘

[백준] 10845 큐

99mini 2019. 8. 6. 15:08
반응형

문제출처] https://www.acmicpc.net/problem/10845

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

www.acmicpc.net


문제요약

정수를 저장하는 큐를 구현하는 문제입니다.

풀이

단계별로 문제풀기의 큐 단계 문제입니다. 큐를 직접 구현하여 문제를 해결할 수도 있지만 STL queue 라이브러리를 이용하여 문제를 풀어 볼 것입니다. 먼저 큐에 대해서 알아보겠습니다.

큐(Queue)란?

큐는 FIFO(First In First Out)으로 작동합니다. 즉, 먼저 들어온 데이터가 먼저 나갑니다. 

 

그림과 같이 양쪽이 모두 뚫려있는 파이프 형태의 자료구조가 큐입니다. 큐도 스택과 마찮가지로 데이터가 차례차레 쌓이며 데이터를 빼낼때는 앞쪽부터 뺍니다. 참고적으로 컴퓨터의 기본적인 자료구조가 큐로 구성되어 있습니다. 

STL 큐 라이브러리 사용법

1. 생성자

queue <데이터 형> 변수이름;

예시)

queue <int> int_q;
queue <string> str_q;

 

2. 멤버 함수

함수 반환형 매개변수 기능
push void 데이터 타입 큐에 원소를 추가
pop 데이터 타입 void 큐에 원소를 삭제
front 데이터 타입 void 큐 제일 앞에 있는 원소 반환
back 데이터 타입 void 큐 제일 뒤에 있는 원소 반환
empty bool void 큐가 비어있으면 true 아니면 false 반환
size 사이즈 타입 void 큐 사이즈 반환

 


queue 라이브러리를 이용하면 매우 간단하게 문제를 해결할 수 있습니다. 


소스코드는 C++로 작성하였습니다.

#include <iostream>
#include <queue>
#include <string>

using namespace std;

queue <int> q;

int main() {
	int num;
	cin >> num;

	for (int i = 0; i < num; i++) {
		
		string str;
		cin >> str;
		if (str == "push") {
			int x;
			cin >> x;
			q.push(x);
		}
		else if (str == "pop") {
			if (q.empty()) 
				cout << -1 << endl;
			else {
				cout << q.front() << endl;
				q.pop();
			}
		}
		else if (str == "size") {
			cout << q.size() << endl;
		}
		else if (str == "empty") {
			cout << (int)q.empty() << endl;
		}
		else if (str == "front") {
			if (q.empty()) 
				cout << -1 << endl;
			else	
				cout << q.front() << endl;
		}
		else if (str == "back") {
			if (q.empty())
				cout << -1 << endl;
			else
				cout << q.back() << endl;
		}
		
	}
}
반응형