본문 바로가기
알고리즘 이전/그리디

회의실 배정

by hoshi03 2023. 9. 4.

좌표 정렬 잘 기억해두자 this - o <- 오름차순 o - this <- 내림차순

 

한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들려고 한다.

각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라.

단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다.

회의 횟수의 최대값 구하기

 

1. 끝나는 시간 기준으로 오름차순 정렬

2. 끝나는 시간이 같으면 시작 시간 오름차순 정렬

 

이렇게 하면 빨리 끝나는 회의를 찾고, 그 회의가 끝나면 바로 이어서 할 수 있는 회의를 하는 최적의 경우가 된다

 

입력

5
1 4
2 3
3 5
4 6
5 7

 

출력

3

 

입력

3
3 3
1 3
2 3

 

출력 

2

 

import java.util.*;
class point implements Comparable<point>{
    int start;
    int end;
    point(int start, int end) {
        this.start = start;
        this.end = end;
    }

    @Override
    public int compareTo(point o) {
        if (this.end == o.end) return  this.start - o.start;
        else return this.end - o.end;
    }
}

class Main{
    static ArrayList<point> arr;
    static int res = 0, fin = Integer.MIN_VALUE;

    public void Solution(ArrayList<point> arr){

        for (point x : arr){
            if (x.start >= fin) {
                res++;
                fin = x.end;
            }
        }
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        arr = new ArrayList<>();
        for (int i = 0; i < n; i++) arr.add(new point(in.nextInt(), in.nextInt()));
        Collections.sort(arr);
        T.Solution(arr);
        System.out.println(res);
    }
}

'알고리즘 이전 > 그리디' 카테고리의 다른 글

친구인가(Disjoint-set: 유니온-파인드)  (0) 2023.09.06
다익스트라자 알고리즘  (0) 2023.09.05
최대 수입 스케쥴(우선순위 큐)  (0) 2023.09.04
결혼식  (0) 2023.09.04
씨름 선수  (0) 2023.09.04