[백준] 1931. 회의실 배정 (Java)

서재·2024년 2월 21일
0

백준 JAVA 풀이

목록 보기
17/36

👨‍💻 문제


✍️ 풀이

🗃️ 정렬

해당 문제는 하나의 회의실에서 할 수 있는 가장 많은 회의의 수를 찾는 것이다.

회의가 끝나는 시각이 이른 회의부터 채워나가면 가장 많은 회의를 할 수 있다.

회의가 끝나는 시각을 기준으로 정렬한다.

⏲️ 측정

회의가 시작하는 시각현재 시각보다 이르거나 같다면,
회의가 끝나는 시각을 기준으로 현재 시각을 갱신한다.

이를 반복한다.

        long currentTime = 0;
        int result = 0;
        for (int i=0; i<n; i++) {
            long start = arr[i][0];
            long end = arr[i][1];

            if (start >= currentTime) {
                currentTime = end;
                result++;
            }
        }

⚠️ 주의사항

끝나는 시각이 같다면, 시작 시각이 빠른 회의가 우선순위가 높다.
해당 조건 없이 끝나는 시각으로만 정렬을 하면,
아래 케이스를 통과하지 못 하게 된다.

2
5 5
1 5

📄 전체 소스코드

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

public class Main {

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        long[][] arr = new long[n][2];
        for (int i=0; i<n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            arr[i][0] = Long.parseLong(st.nextToken()); // start
            arr[i][1] = Long.parseLong(st.nextToken()); // end

        }

        Arrays.sort(arr, (o1, o2) -> {
            if (o1[1] == o2[1]) {
                return Long.compare(o1[0], o2[0]);
            }
            return Long.compare(o1[1], o2[1]);
        });

        long currentTime = 0;
        int result = 0;
        for (int i=0; i<n; i++) {
            long start = arr[i][0];
            long end = arr[i][1];

            if (start >= currentTime) {
                currentTime = end;
                result++;
            }
        }

        System.out.println(result);

    }

}
profile
입니다.

0개의 댓글

관련 채용 정보