동그란 도그린
BOJ 15828 - Router 본문
입력
- 첫 줄에 버퍼의 크기를 나타내는 자연수 N 입력
- 둘째 줄부터 한 줄에 하나씩 라우터가 처리해야 할 정보 입력
- 양수: 해당하는 번호의 패킷이 입력으로 들어왔다는 것을 의미
- 0 : 라우터가 패킷 하나를 처리했다는 것을 의미 (버퍼가 비어있을때는 0이 입력으로 들어오지 않음)
- -1 : 입력의 끝을 의미
출력
- 라우터에 남아있는 패킷을 순서대로 출력
- 비어있는 경우 “empty”를 출력
풀이 방법
- 큐 이용하여 구현
- 입력 받은 수가 양수이고, 버퍼가 가득 차지 않은 경우 ⇒ 큐에 입력 받은 패킷 번호 저장
- 0을 입력 받은 경우 ⇒ 큐에 저장된 맨 앞의 패킷 꺼내기
- if문을 통해 큐(버퍼)가 비어있는 경우와 비어있지 않은 경우로 나누어 출력
코드
import java.io.*;
import java.util.*;
public class BOJ_15828 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine()); // 버퍼의 크기
Queue<Integer> queue = new LinkedList<Integer>(); // 큐 (패킷 저장)
int packet, rest; // packet: 입력받은 패킷 정보 저장할 변수, rest: 남은 패킷 저장할 변수
while(true) {
packet = Integer.parseInt(br.readLine());
if(packet == -1) { // -1을 입력받으면 반복문 빠져나가기
break;
}
if(packet > 0 && queue.size() < N) { // 입력받은 수가 양수이고 버퍼가 가득 차지 않았다면
queue.add(packet); // 버퍼에 패킷 추가
} else if(packet == 0) { // 0을 입력받으면 맨 앞의 패킷 꺼내기
queue.poll();
}
}
if(queue.isEmpty()) { // 버퍼가 비어있으면 "empty" 츨력
bw.write("empty");
} else {
while(!queue.isEmpty()) { // 버퍼가 비어있지 않으면 남아있는 패킷 번호 출력
rest = queue.poll();
bw.write(rest+" ");
}
}
bw.flush();
bw.close();
}
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
BOJ 12970 - AB (1) | 2023.12.18 |
---|---|
Programmers - 올바른 괄호 (0) | 2023.02.26 |
BOJ 2193 - 이친수 (0) | 2023.02.11 |
BOJ 9095 - 1, 2, 3 더하기 (0) | 2023.01.24 |
BOJ 15651 - N과 M (3) (0) | 2023.01.23 |
Comments