[C++] 15828 : 라우터

리폐·2023년 11월 8일

백준

목록 보기
14/18

📝 문제

15828 : 라우터


✏️ 입력1

5
1
2
0
3
4
0
5
6
0
0
-1

💻 출력1

5 6

✏️ 입력2

1
1
2
3
4
5
6
7
-1

💻 출력2

1

✏️ 입력3

1
1
2
0
3
4
0
5
6
0
7
0
-1

💻 출력3

empty

💭 문제해결법

  1. 버퍼 카운터 사용해 버퍼 카운터가 패킷보다 크면 0을 제외한 나머지값은 받지않기
  2. 0을 입력 받았을때 버퍼 카운터가 버퍼 크기보다 작고, 큐가 empty가 아닐때만 pop
  3. 나머지 값은 push로 처리 후 -1이 들어오면 while문 탈출

⌨️ 소스코드1

//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점을 준 이유는 모르겠음...)


⌨️ 소스코드2

//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 할 기준을 추가하여 코드 완성

profile
Unreal 5, Unity 공부

0개의 댓글