본문 바로가기
Algorithm/Baekjoon

[백준]31997: 즐거운 회의 - JAVA

Baspo8 2024. 9. 2.

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

 

풀이

N명의 사람들이 회의에 입장하고 퇴장하는 시간이 주어진다.

 

M개의 서로 친한 사람들의 쌍이 주어진다.

 

먼저 각 사람별로 회의에 입장하고 퇴장하는 시간의 정보를 저장한다.

 

`T + 1` 길이의 배열을 만들어 서로 친한 사람들의 쌍을 입력받으면서 해당 배열에 값을 저장한다.

 

예를 들어 c와 d가 친하다면 c와 d의 회의 입장/퇴장 정보를 확인하여,

 

두 사람이 회의에 함께 있는 시간(start)은 `두 사람이 입장하는 시간을 비교하여 큰 값`, 

 

두 사람이 회의에 함께 있다가 함께 하지 않는 시간(end)은 `두 사람이 퇴장하는 시간을 비교하여 작은 값`이 된다.

 

다만, start가 end보다 같거나 크다면 두 사람은 서로 함께 있지 않는다.

 

start가 end보다 작은 경우에만 배열에 start에는 +1, end에는 -1을 더해준다.

 

다 입력한 후, 누적합하여 각 시간에 서로 친한 쌍이 몇 쌍 있는지 출력하면 끝.

 

근데 회의..즐겁니?

 


 

메모리: 108544KB
시간: 576ms
언어: Java 11

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int t = Integer.parseInt(st.nextToken());

        int[][] schedule = new int[n + 1][2];
        for (int i = 1; i < n + 1; i++) {
            st = new StringTokenizer(br.readLine());
            schedule[i][0] = Integer.parseInt(st.nextToken());
            schedule[i][1] = Integer.parseInt(st.nextToken());
        }

        int[] timeTable = new int[t + 1];
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int c = Integer.parseInt(st.nextToken());
            int d = Integer.parseInt(st.nextToken());

            int start = Math.max(schedule[c][0], schedule[d][0]);
            int end = Math.min(schedule[c][1], schedule[d][1]);

            if (start < end) {
                timeTable[start]++;
                timeTable[end]--;
            }
        } 

        for (int i = 1; i < t; i++) {
            timeTable[i] += timeTable[i - 1];
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < t; i++) {
            sb.append(timeTable[i]).append("\n");
        }

        System.out.println(sb);
    }
}