백준 15828 Router

Eunkyung·2021년 10월 29일
0

Algorithm

목록 보기
3/30

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

문제해결

라우터에 입력된 순서대로 버퍼에 추가되고 삭제된다는 것을 통해 큐 자료구조를 이용해야겠다고 생각했다. 만약 버퍼에 공간이 없을 경우 입력은 무시되는데 이는 큐가 꽉 찰 경우 추가하지 않겠다는 의미와 동일하다. 입력값이 0이면 패킷 처리, -1은 종료조건, 그 외의 양수값은 패킷 처리를 의미한다.

  1. 입력으로 받는 N은 큐의 사이즈이다.
  2. -1을 입력받으면 종료된다. -> (while sc.nextInt() != -1)
  3. if 입력받은 값이 0이면 큐에서 제거 / else if 입력받은 값이 양수이면서 현재 큐의 사이즈가 입력으로 받은 N보다 작으면 큐에 추가
  4. 반복이 끝나고 큐가 비었다면 empty 출력 / 그렇지 않으면 큐에 있는 값 출력

소스코드

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

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

부족했던 점

  • 종료조건임과 동시에 입력받을 값의 변수인 check를 생각하지 못했음
  • 현재 큐가 꽉 차서 입력받지 못하는 부분 구현하지 못했음
  • Scanner로 입력받았을 경우 1616ms / BufferedReader로 입력받았을 경우 1076ms
profile
꾸준히 하자

0개의 댓글