[BOJ] 15828번_Router_큐 (C++)

ChangBeom·2024년 7월 6일

Algorithm

목록 보기
25/97

[문제]

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

라우터 내부에 존재하는 버퍼의 크기 N을 입력받은 후 라우터가 처리해야할 정보를 하나씩 입력받는다. 양의 정수는 패킷이 입력으로 들어왔다는 것을 의미하고, 0은 라우터가 패킷을 하나 처리했다는 것을 의미한다. 그리고 버퍼가 비어있을때는 0이 입력으로 들어오지 않는다. -1은 입력의 끝을 나타낸다.

[사용 알고리즘]

queue(큐)

[풀이 핵심]

  • while문으로 반복하며 정보를 입력받는다.
    1. -1이면 break 한다.
    2. 버퍼가 비어있지 않을 때 0을 입력받으면 q.pop()으로 패킷을 하나 처리한다.
    3. 양수를 입력받았을때

      3-1 버퍼가꽉차있으면 정보를 저장할 수 없으므로 continue해준다.
      3-2 버퍼의 자리가 남아있으면 p.push(info)로 정보를 저장해준다.

    4. -1을 입력받은 후 큐(버퍼)안의 정보를 전부 출력한다.

[코드]


//boj15828번_Router_큐

#include<iostream>
#include<queue>

using namespace std;

int main() {
	int N;
	cin >> N;

	queue<int> q;

	while (true) {
		int info;
		cin >> info;

		if (info == -1) {
			break;
		}

		if (!q.empty() && info == 0) {
			q.pop();
		}

		if (info > 0) {
			if (q.size() >= N) {
				continue;
			}
			else {
				q.push(info);
			}
		}
	}

	if (q.empty()) {
		cout << "empty";
	}
	else {
		while (!q.empty()) {
			cout << q.front() << " ";
			q.pop();
		}
	}

	return 0;
}

0개의 댓글