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

가오리·2024년 1월 26일
0
post-thumbnail

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


그리디 알고리즘 문제이다.

  1. 최대한 많은 활동을 선택하려면 종료시간이 빠른 것부터 골라야 한다.

  2. 입력 받은 회의 정보를 종료 시간을 기준으로 오름차순으로 정렬한다. (종료 시간이 같을 경우 시작 시간이 빠른 순으로 정렬)

  3. 직전 회의의 종료 시간 이후에 시작하는 회의일 경우 선택하며(어차피 종료 시간이 빠른 순서대로 정렬되어 있기 때문에) 종료 시간과 회의 갯수를 업데이트 해준다.


public class bj1931 {

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

        int N = Integer.parseInt(br.readLine());

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

        for (int i = 0; i < N; i++) {
            String line = br.readLine();
            String[] split = line.split(" ");
            time[i][0] = Integer.parseInt(split[0]);
            time[i][1] = Integer.parseInt(split[1]);
        }

        Arrays.sort(time, (o1, o2) -> {

            // 종료시간이 같을 경우 시작시간이 빠른순으로 정렬해야한다.
            if(o1[1] == o2[1]) {
                return o1[0] - o2[0];
            }

            return o1[1] - o2[1];
        });

        int nowTime = 0, answer = 0;

        for (int i = 0; i < N; i++) {
            // 직전 회의 종료 시간 이후에 시작하는 회의인지 확인
            if (time[i][0] >= nowTime) {
                nowTime = time[i][1];
                answer++;
            }
        }

        System.out.println(answer);
        br.close();
    }
}

profile
가오리의 개발 이야기

0개의 댓글

관련 채용 정보