728x90
문제
풀이
패킷이 먼저 들어온 것이 먼저 처리되므로, FIFO(First In First Out)의 자료구조인 큐를 사용하면 된다.
입력은 while(true)로 계속 받는다. 입력 받은 수가 -1 이라면 while문을 빠져나온다.
입력 받은 수가 양의 정수이고, 큐의 크기가 버퍼 크기보다 작다면, 큐에 해당 수를 넣는다.
입력 받은 수가 0이라면 큐에서 값 하나를 뺀다.
입력 받은 수가 양수이지만 큐의 크기가 버퍼 크기와 같거나 크면, 아무것도 하지 않는다.
반복문을 빠져나와서, 큐가 비었는지 확인하여 비었다면 empty를 StringBuilder에 추가한다.
큐가 비어있지 않다면, 반복문이 빠져 나온 시점에 큐의 크기를 변수 하나에 저장해 둔다. (그렇게 하지 않으면, 큐에서 수를 하나 꺼낼 때 마다 큐의 size가 줄어든다.) 저장해 둔 큐의 크기만큼 반복문을 돌며 큐에 있는 값을 빼면서 StringBuilder에 추가한다.
답을 출력한다.
코드
package baekjoon._15828;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int routerSize = Integer.parseInt(br.readLine());
Queue<Integer> queue = new LinkedList<>();
while(true) {
// 입력 받기
int x = Integer.parseInt(br.readLine());
if (x == -1) break; // -1 이면 끝
// 큐에 패킷 쌓임
if (x > 0 && queue.size() < routerSize) {
queue.offer(x);
}
// 패킷이 처리됨
else if (x == 0) queue.poll();
}
if (queue.isEmpty()) sb.append("empty");
else {
int queueSize = queue.size();
for(int i = 0; i < queueSize; i++) {
sb.append(queue.poll()).append(" ");
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
'Baekjoon' 카테고리의 다른 글
[백준/자바] 20551번 Sort 마스터 배지훈의 후계자 (0) | 2024.05.13 |
---|---|
[백준/자바] 15135번 Olympiad Pizza (0) | 2024.04.26 |
[백준/자바] 18258번 큐 2 (1) | 2024.04.26 |
[백준/자바] 11899번 괄호 끼워넣기 (0) | 2024.04.14 |
[백준/자바] 1343번 폴리오미노 (0) | 2024.03.28 |