[백준 BOJ] 18258번 큐 2 (C++/cpp)

2023. 3. 2. 16:27PS (Program Solving)/BOJ (백준)

문제 설명

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

 

18258번: 큐 2

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

www.acmicpc.net

백준 BOJ 18258번 큐 2 문제 사진1
백준 BOJ 18258번 큐 2 문제 사진2

 

접근 방법 - 큐를 이용한 기본 문제

백준의 18258번 문제는 큐 자료구조를 이용하여 해결해야 하는 기본적인 문제이다.

해당 문제는, 입력으로 주어지는 명령문에 따라 큐의 원리를 이용하여 가동하며 알맞게 출력을 수행해야 하는 문제이다.

해당 문제와 거의 같은 문제에 대해 이전에 필자가 작성한 풀이 글이 있는데, 이 링크를 아래에 기재해 본다.

https://smary-it.tistory.com/79

 

[백준 BOJ] 10845번 큐 (C++/cpp)

문제 설명 https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나

smary-it.tistory.com

 

위 링크에는 풀이가 별로 없는데, 위에서 성공한 코드를 자세히 보면 여기에 올라온 코드와 똑같은 코드가 있을 것이다.

그렇다, 위 문제를 풀어본 사람이라면 그 코드를 그대로 복사 붙여넣기 하면 해결될 문제라는 것이다. (...)

그래서 부연 설명은 크게 하지 않았지만, 위 문제에서 큐에 대한 설명이 너무 없었기 때문에 cpp의 큐 함수에 대해서 아래에 간략히 적어보았다.

혹여나 큐를 처음 접해본다면, 아래의 설명과 코드를 참고해 보길 바란다.

 

큐와 관련된 함수 (C++/cpp)
- push() : 큐에 특정 값을 넣는 함수
- pop() : 큐의 front 값을 큐에서 빼내는 함수
- size() : 현재 큐의 크기를 반환하는 함수
- empty() : 큐가 비어있는지에 대한 여부를 반환하는 함수 (비어있으면 1(true), 아니라면 0(false) 반환)
- front() : 큐에서 가장 앞에 있는 값을 반환하는 함수 (가장 늦게 큐에 들어간 값을 반환하는 함수)
- back() : 큐에서 가장 뒤에 있는 값을 반환하는 함수 (가장 최근에 큐에 들어간 값을 반환하는 함수)
반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <queue>
#include <string>
#define endl '\n'
using namespace std;

//백준 18258번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);
	queue<int> q;
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		string ch;
		cin >> ch;
		if (ch == "push") {
			int num;	cin >> num;
			q.push(num);
		}
		else if (ch == "pop") {
			if (q.empty()) { cout << -1 << endl; }
			else {
				cout << q.front() << endl;
				q.pop();
			}
		}
		else if (ch == "size") {
			cout << q.size() << endl;
		}
		else if (ch == "empty") {
			if (q.empty()) { cout << 1 << endl; }
			else { cout << 0 << endl; }
		}
		else if (ch == "front") {
			if (q.empty()) { cout << -1 << endl; }
			else {
				cout << q.front() << endl;
			}
		}
		else if (ch == "back") {
			if (q.empty()) { cout << -1 << endl; }
			else {
				cout << q.back() << endl;
			}
		}
	}
}

 

제출 결과

백준 BOJ 18258번 큐 2 문제 C++ 제출 결과

(2023.01.16 백준 18258번 문제 제출 결과)

반응형