본문 바로가기
컴퓨터 공학/백준

[백준] JAVA 자바 : 회의실 배정 (1931번)

by kim-dev 2024. 2. 23.
반응형


꽤 오래 걸리긴 했는데, 생각보다 되게 간단한 문제였다.
일단 배열을 정렬한 후 하나씩 넣으면서, 앞서 배정한 회의의 끝나는 시간보다 시작 시간이 더 뒤에 오면서, 회의 진행 시간이 가장 짧은 회의를 배정하면 된다.

 

그래서 이차원 배열의 개수를 3개로 만들고, 인덱스 0에는 시작 시간, 1에는 끝나는 시간, 2에는 회의 진행 시간을 할당했다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.Comparator;

public class AssignConference {

    public static int stoi(String str) {
        return Integer.parseInt(str);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = stoi(br.readLine());

        int last = Integer.MAX_VALUE;
        int lastIdx = 0;
        int[][] arr = new int[N][3];
        for (int i=0; i<N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            arr[i][0] = stoi(st.nextToken());
            arr[i][1] = stoi(st.nextToken());
            if (arr[i][1] <= last) {
                last = arr[i][1];
                lastIdx = i;
            }

            arr[i][2] = arr[i][1] - arr[i][0];
        }

        arr[lastIdx][0] = Integer.MIN_VALUE;
        arr[lastIdx][1] = Integer.MIN_VALUE;
        Arrays.sort(arr, (o1, o2) -> (o1[1] == o2[1] ? o1[0]-o2[0] : o1[1]-o2[1]));

        int count = 1;
        for (int i=0; i<N; i++) {
            if (arr[i][0] >= last) {
                last = arr[i][1];
                count++;
            }
        }

        System.out.println(count);
    }
}

 

 

로그인

 

www.acmicpc.net