Algorithm/문제 풀이 / / 2022. 11. 24. 02:32

[BAEKJOON_26042 - JAVA] 식당 입구 대기 줄

반응형

문제

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

 

26042번: 식당 입구 대기 줄

첫 번째 정보부터 n번째 정보까지 순서대로 처리한 다음, 식당 입구에 줄을 서서 대기하는 학생 수가 최대가 되었던 순간의 학생 수와 이때 식당 입구의 맨 뒤에 대기 중인 학생의 번호를 빈칸을

www.acmicpc.net

JAVA 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

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));
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st;

        Deque<Integer> deque = new LinkedList<>();
        int maxLine = 0;
        int lastStudentNum = Integer.MAX_VALUE;

        int peek = 0;
        int size = 0;
        for (int idx = 0; idx < N; idx++) {
            st = new StringTokenizer(br.readLine());
            if (1 == Integer.parseInt(st.nextToken())) {
                deque.add(Integer.parseInt(st.nextToken()));
                size = deque.size();
                peek = deque.peekLast();

                // 대기하는 학생 수가 최대가 되었던 순간의 학생 수와 이때 식당 입구의 맨 뒤에 대기 중인 학생의 번호
                if (maxLine < size) {
                    lastStudentNum = peek;
                    maxLine = size;

                // 대기하는 학생 수가 최대인 경우가 여러 번이라면 맨 뒤에 줄 서 있는 학생의 번호가 가장 작은 경우를 출력
                } else if (maxLine == size && lastStudentNum > peek) {
                    lastStudentNum = peek;
                }

            } else {
                deque.pollFirst();
            }
        }

        bw.write(maxLine + " " + lastStudentNum);

        br.close();
        bw.flush();
        bw.close();

    }

}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유