본문 바로가기
알고리즘/백준 문제 풀이

[BOJ/백준] 18258번 큐 2 - c++ 풀이

by 미니상미니 2023. 4. 10.
반응형

https://www.acmicpc.net/problem/18258

 

18258번: 큐 2

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

www.acmicpc.net

 

 

 

 


  • 문제


해설

 pop, front, back, top 명렁 처리 시 비어있는 지 체크 해주는 것에 유의해야 한다.

 

아래 코드는 c++의 실행 속도와 입출력 속도를 향상 시켜준다.

ios_base :: sync_with_stdio(false);
cin.tie(NULL);

ios_base :: sync_with_stdio(false);
c의 stdio와 c++의 iostream의 동기화를 비활성화 하므로

동일한 버퍼 사용으로 인한 성능 저하를 발생 시키지 않는다.

 

 

cin.tie(null)

묶여져 있는 cin, cout를 풀어줍니다

cout << "Hello World! \n";
cin >> variable;

일반적으로 "Hello World!"가 반드시 출력된 후 variable을 입력 받을 수 있다.

cin.tie(null) 사용 시 "Hello World!" 출력 전에 variable을 입력 받을 수 있게 된다

 

즉 내부적으로 cin과 cout을 묶어주는 과정을 거치지 않기 때문에 시간이 절약 된다.

코드

#include <iostream>
#include <queue>

using namespace std;

int main() {

	ios_base :: sync_with_stdio(false);
	cin.tie(NULL);

	queue<int> Q;
	string command;
	int t, cnt;

	cin >> t;

	for (int i = 0; i < t; i++) {
		cin >> command;
		
		if (command == "push") {
			cin >> cnt;
			Q.push(cnt);
		}
		else if (command== "pop") {
			if (Q.empty()) {
				cout << "-1" << '\n';
			} else {
				cout << Q.front() << '\n';
				Q.pop();
			}
		}
		else if (command == "front") {
			if (Q.empty()) {
				cout << "-1" << '\n';
			}
			else {
				cout << Q.front() << '\n';
			}
		}
		else if (command == "back") {
			if (Q.empty()) {
				cout << "-1" << '\n';
			}
			else {
				cout << Q.back() << '\n';
			}
		}
		else if (command == "size")
			cout << Q.size() << '\n';
		else if (command == "empty")
			cout << Q.empty() << '\n';
		else if (command == "top") {
			if (Q.empty()) {
				cout << "-1" << '\n';
			}
			else {
				cout << Q.front() << '\n';
			}
		}
	}

	

	return 0;
}

 

 

 

 

 

반응형

댓글