백준 15828 c++

magicdrill·2024년 8월 8일

백준 문제풀이

목록 보기
412/673

백준 15828 c++

반복문을

for(i = 0; i < buffer.size(); i++)
{
	buffer.pop();
}

로 했더니, buffer가 새로운 순회문이 돌때마다 size를 갱신해서 문제가 생겼다. 반복문 횟수는 변수를 따로 지정하겠다.

또한 입력과정에서 큐 크기가 N을 초과했는지 확인하는 과정을 먼저 가졌더니 0의 경우 pop()하는 과정을 생략하는 문제가 있었다.

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

void input_data(queue<int>& buffer)
{
	int N;
	int i, temp;

	cin >> N;
	while (1)
	{
		cin >> temp;
		//cout << temp << " " << buffer.size() << "\n";

		//입력 종료
		if (temp == -1)
		{
			break;
		}

		//입력이 0이면 버퍼에 대기중인 작업 하나 수행
		if (temp == 0)
		{
			buffer.pop();
		}
		else//아니면 버퍼에 추가
		{
			//버퍼가 꽉 차았으면 추가 안함
			if (buffer.size() >= N)
			{
				continue;
			}
			buffer.push(temp);
		}
	}

	return;
}

void find_answer(queue<int>& buffer)
{
	int i;

	if (buffer.empty() || buffer.size() == 0)
	{
		cout << "empty\n";
	}
	else
	{
		//cout << buffer.size() << "\n";
		while (!buffer.empty())
		{
			cout << buffer.front() << " ";
			buffer.pop();
		}
		cout << "\n";
	}
	
	return;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	queue<int> buffer;

	input_data(buffer);
	find_answer(buffer);

	return 0;
}

0개의 댓글