6월 3주차 - 탐욕 [백준, 자바] 1931번: 회의실 배정

jinvicky·2024년 6월 12일
0

ALG

목록 보기
57/62
post-thumbnail

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

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());

        int[][] time = new int[N][2];

        StringTokenizer st;

        for(int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            time[i][0] = Integer.parseInt(st.nextToken()); // 시작 시간
            time[i][1] = Integer.parseInt(st.nextToken()); // 종료 시간
        }

        // 이 정렬을 해야한다는 것을 떠올려야 했다.
        Arrays.sort(time, (o1, o2) -> {
            if(o1[1] == o2[1]) {
                return o1[0] - o2[0];
            } else {
                return o1[1] - o2[1];
            }
        });

        int count = 0;
        int prevEndTm = 0;

        for(int i = 0; i < N; i++) {
            if(prevEndTm <= time[i][0]) {
                prevEndTm = time[i][1];
                count++;
            }
        }
        System.out.println(count);
    }
}

풀이

처음에는 이전 회의실 끝나는 시간이랑 다음 회의실 시작하는 시간만 비교하면 될 것이라고 생각했는데 아님.

일단 회의실 배정 시간을 끝나는 시간이 큰 순으로 정렬을 한다.
종료시간이 같다면 시작시간을 오름차순으로 정렬한다.

종료시간이 빠르면 빠를 수록 회의실 사용 가능 횟수가 증가한다.

왜 시작시간을 오름차순으로 정렬하냐면,
종료시점으로만 기준으로 정렬하게 되면 경우에 따라서 시작시간이 더 큰 회의실이 먼저 나와서 prevEndTm이 갱신되어 count가 감소하기 때문이다.

profile
일단 쓰고 본다

0개의 댓글