[백준] 28018번 시간이 겹칠까?

park geonwoo·2024년 10월 4일

코딩테스트

목록 보기
16/32

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


import java.io.*;
import java.util.*;

public class LibrarySeatUsage {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위해 BufferedReader와 BufferedWriter 사용
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;

        // 학생 수 N
        int N = Integer.parseInt(br.readLine());

        // 최대 시각을 1,000,001로 설정 (E + 1까지 포함)
        int MAX_TIME = 1000001;
        int[] counts = new int[MAX_TIME + 2]; // 인덱스 0부터 사용

        // N개의 좌석 사용 구간 입력
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            int S = Integer.parseInt(st.nextToken());
            int E = Integer.parseInt(st.nextToken());

            counts[S] += 1;       // 시작 시각에 1 추가
            counts[E + 1] -= 1;   // 종료 시각 다음에 1 감소
        }

        // 차분 배열을 누적 합으로 변환
        for (int t = 1; t <= MAX_TIME; t++) {
            counts[t] += counts[t - 1];
        }

        // 질의 수 Q
        int Q = Integer.parseInt(br.readLine());

        // Q개의 질의 시각 입력
        st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < Q; i++) {
            int queryTime = Integer.parseInt(st.nextToken());
            // 시각이 범위를 벗어나지 않도록 확인
            if (queryTime >= 0 && queryTime <= MAX_TIME) {
                sb.append(counts[queryTime]).append("\n");
            } else {
                sb.append("0\n"); // 시각이 범위를 벗어나면 0
            }
        }

        // 결과 출력
        bw.write(sb.toString());

        // 버퍼 비우기 및 닫기
        bw.flush();
        bw.close();
        br.close();
    }
}




0개의 댓글