상세 컨텐츠

본문 제목

26042. 식당 입구 대기 줄

Algorithm

by aeongiii 2024. 12. 3. 14:33

본문



1. 문제 분석
    1) N개의 정보가 주어진다.
    2) 각 정보는 1 a 또는 2 중 하나이며, 1 a일 경우 a라는 학생을 넣는다. 2일 경우 앞에서부터 뺀다.
    3) 줄을 서서 대기하는 학생 수가 최대가 되었던 순간들 중 가장 작은 맨 뒷번호를 출력한다.

2. 제약 조건
   1 <= N <= 100,000
   1 <= a <= n, a의 값은 모두 서로 다르다.

3. 의사결정
    1) N을 입력받고, N만큼 while을 돌린다. 큐를 선언한다.
    2) 반복문 안에서 N줄을 차례로 입력받는다. 한줄을 받을때마다 저장 + 대기인원 수(큐의 길이)를 센다.
    3) 큐의 길이가 지금까지 중 최대일 때, 맨뒷줄(방금 들어간 수)의 값을 저장한다. ===> 데크가 낫나?


4. 문제 해결
    1) 문제 없이 바로 정답처리되었다.

 

import java.util.*;
import java.io.*;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // N 받기
        int N = Integer.parseInt(br.readLine());

        // 큐
        Queue<Integer> queue = new LinkedList<>();

        int longer_queue = 0;
        int last_student = 0;
        int student = 0;

        for (int i = 0; i < N; i++) {
            // 한줄 입력받기
            StringTokenizer st = new StringTokenizer(br.readLine());
            int category = Integer.parseInt(st.nextToken()); // 유형 1 또는 2

            // 저장
            if (category == 1) { // 1일 경우 학생까지 입력받고 저장
                student = Integer.parseInt(st.nextToken());
                queue.add(student);
            } else { // 2일 경우 하나 뽑음
                queue.poll();
            }

            // 크기 검사

            // 지금 큐 길이가 최대 길이라면, 갱신
            if (longer_queue < queue.size()) {
                longer_queue = queue.size();
                last_student = student; // 가장 최근의 student가 맨 뒤에 있으므로 이거 넣기
            }
            // 지금 큐 길이와 최대 큐 길이가 같고 + 지금의 학생 수가 더 작다면, 갱신
            else if (longer_queue == queue.size() && last_student > student) {
                last_student = student;
            }
        }

        // for문이 다 끝났다면 출력
        System.out.println(longer_queue + " " + last_student);
    }
}

'Algorithm' 카테고리의 다른 글

1946. 신입 사원  (1) 2024.12.04
1026. 보물  (0) 2024.12.04
13975. 파일 합치기 3  (0) 2024.12.03
1863. 스카이라인 쉬운거  (0) 2024.12.03
1524. 세준세비  (1) 2024.12.02

관련글 더보기