Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

동그란 도그린

BOJ 15828 - Router 본문

알고리즘/문제 풀이

BOJ 15828 - Router

도그rin 2023. 3. 24. 17:41

입력

  • 첫 줄에 버퍼의 크기를 나타내는 자연수 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