반복문을
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;
}