[백준] 15828 Router 자바 풀이

2021. 3. 18. 13:49알고리즘

※ 사용언어 : JAVA ※

 

▼ 문제 링크 ▼

www.acmicpc.net/problem/15828

 

15828번: Router

인터넷을 사용하기 위해서는 컴퓨터에 인터넷 회선을 연결하거나 Wi-Fi를 연결해야 한다. 이렇게 연결된 네트워크를 통해 컴퓨터에는 통신이 가능하다. 마음에 드는 노래나 동영상이 있는 곳에

www.acmicpc.net

 


 

고려 사항

1. 버퍼가 수용할 수 있는 패킷의 양은 정해져 있다 (즉, 버퍼의 크기가 존재함)
2. 버퍼가 가득 찼을 때 패킷이 들어오면 해당 패킷은 버려진다.
3. 버퍼는 선입선출 구조로 들어온 순서대로 패킷을 처리한다
4. 입력값 0 = 버퍼에 있는 패킷을 처리함 / 입력값 -1 : 입력 종료 / 그 외 입력값 : 패킷

 


 

문제풀이 (With JAVA)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class _15828 {

    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        
        int que_size= Integer.parseInt(br.readLine());
        int check=0;
        Queue<Integer> queue=new LinkedList<>();
        
        while(check!=-1){
            check=Integer.parseInt(br.readLine());
            if(check==0){
                queue.poll();
            }
            else{
                if(check>0 && queue.size()<que_size) {
                    queue.offer(check);
                }
            }
        }
        
        if(queue.isEmpty()){
            System.out.println("empty");
        }
        else{
            while (!queue.isEmpty()){
                System.out.print(queue.poll()+" ");
            }
        }
    }
}

◇ check라는 변수에 입력값을 받고, check가 종료 조건인 -1을 입력받기 전까지 while문을 돌림 

 

◇ check=0이면, 라우터가 버퍼에 있는 일을 처리했음으로 queue(버퍼)에서 패킷을 꺼낸다.

 

◇ check!=0이면, check값이 0보다 큰지 검사한다.

▶ check=-1 인 경우, while문 조건은 while문이 돌아가고 난 뒤에 검사 되기 때문에 0이 아닐 때 queue(버퍼)에 입력값을 집어넣으면 -1도 함께 들어가게 된다.

 

◇ check>0보다 크면 queue.size()가 que_size(N) 보다 작은지 검사한다

▶ N보다 queue(버퍼)의 크기가 크면, 버퍼가 가득 찬 상황임으로 패킷이 들어갈 수 없는 상황이다.

 

◇ while문이 종료되면 queue(버퍼)가 비어있는지 확인하고 비어있으면 "empty" 비어있지 않으면 queue가 빌 때까지 while문을 돌려 queue안에 든 패킷을 꺼내 출력한다.