(C++) 백준 10845번 - 큐

코딩너구리·2025년 11월 4일

코딩 문제 풀이

목록 보기
66/266

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

문제

> 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여섯 가지이다.

1. push X: 정수 X를 큐에 넣는 연산이다.
2. pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
3. size: 큐에 들어있는 정수의 개수를 출력한다.
4. empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
5. front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
6. back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

접근

큐를 이용해 문제에 주어진 명령을 구현한다.

문제해결

> 큐의 동작을 그대로 사용해도 되지만 문제에 각 동작마다 추가적인 처리가 있으므로 이를 함수로 정의해준다.
> Push함수로 정수를 입력받아 큐의 push동작을 해준다.
Pop함수로 큐의 pop()동작을 해주는데 큐가 비어있다면 -1을 출력하는 동작을 추가로 처리해주고 pop()의 동작을 해준다.
Front함수도 front()의 동작을 하지만 큐가 비었을 떄 -1을 대신 출력해줘야하기 때문에 이를 처리한다.
Back함수도 back()의 동작을 하지만 큐가 비었을 때 -1을 출력한다.
> main함수에서 문자열과 숫자를 입력받는데 숫자는 없을 때도 있기에 getline으로 한꺼번에 받아 string stream으로 나눠 문자열, 숫자로 입력을 받아 처리한다.
> getline에서 첫 입력인 N을 입력받는데에 \n에 대한 오류가 나지 않게 cin.ignore()로 한번 비워주고 입력받는다.
> 받은 문자열과 숫자에 따라 위에서 정의해준 동작을 출력한다.

코드

#include <iostream>
#include <algorithm>
#include <string>
#include <queue>
#include <sstream>
using namespace std;

queue<int> q;
void Push(int i)
{
	q.push(i);
}
int Pop()
{
	if (q.empty())
		return -1;
	int p = q.front();
	q.pop();
	return p;
}
int Front()
{
	if (q.empty())
		return -1;
	int f = q.front();
	return f;
}
int Back()
{
	if (q.empty())
		return -1;
	int b = q.back();
	return b;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int N;
	cin >> N;
    cin.ignore();
	while (N--)
	{
		string s, str;
		int num;

		getline(cin, s);
		stringstream stm(s);
		stm >> str;
		stm >> num;

		if (str == "push") Push(num);
		else if (str == "pop") cout << Pop() << '\n';
		else if (str == "size") cout << q.size() << '\n';
		else if (str == "empty") cout << q.empty() << '\n';
		else if (str == "front") cout << Front() << '\n';
		else if (str == "back") cout << Back() << '\n';
	}
}

후기

예전에 스택으로 한번 했던건데 이번엔 해당 동작을 함수로 정의하고 했다. main문이 더 깔끔해졌다.
하지만 이번에도 문자열,숫자 입력받는데에서 헤맸다. 기본에 충실해 입출력에 대해서도 공부하자.

0개의 댓글