

5
1
2
0
3
4
0
5
6
0
0
-1
5 6
1
1
2
3
4
5
6
7
-1
1
1
1
2
0
3
4
0
5
6
0
7
0
-1
empty
- 버퍼 카운터 사용해 버퍼 카운터가 패킷보다 크면 0을 제외한 나머지값은 받지않기
- 0을 입력 받았을때 버퍼 카운터가 버퍼 크기보다 작고, 큐가 empty가 아닐때만 pop
- 나머지 값은 push로 처리 후 -1이 들어오면 while문 탈출
//15828 라우터
#include <iostream>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, x = 0, buf_cnt = 0;
cin >> n; // 버퍼크기 입력
queue<int> que;
do {
cin >> x;
if (x == 0 && buf_cnt < n) {
if (!que.empty()) {
que.pop();
buf_cnt--;
}
}
else {
if (x == -1) break;
que.push(x);
buf_cnt++;
}
} while (x != -1);
if (que.empty()) cout << "empty" << "\n";
else {
while (!que.empty()) {
cout << que.front() << " ";
que.pop();
}
}
}
버퍼 카운터 변수를 만들어 놓고도 버퍼 카운터값에 따라 if문 처리를 하지않아 부분점수를 받게됨.
(제출 했을때 답이 '틀렸습니다'로 나왔어야 했을거 같은데 50점을 준 이유는 모르겠음...)

//15828 라우터
#include <iostream>
#include <queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, x = 0, buf_cnt = 0;
cin >> n; // 버퍼크기 입력
queue<int> que;
while (1) {
cin >> x;
if (x == 0 && buf_cnt < n) {
if (!que.empty()) {
que.pop();
buf_cnt--;
}
}
else {
if (x == -1) break;
if (buf_cnt >= n) {
if (x == 0) {
que.pop();
buf_cnt--;
}
}
else {
que.push(x);
buf_cnt++;
}
}
}
if (que.empty()) cout << "empty" << "\n";
else {
while (!que.empty()) {
cout << que.front() << " ";
que.pop();
}
}
}
do while문을 일반 while문으로 바꾸고,
버퍼 카운터 값에 따라 push 할 기준을 추가하여 코드 완성
