ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 1931번: 회의실 배정
    PS/Java 2021. 3. 9.

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

     

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

     

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

     

    회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.


    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Baek1931 {
        public static class meet implements Comparable<meet> {
            int startTime;
            int endTime;
    
            meet(int startTime, int endTime) {
                this.startTime = startTime;
                this.endTime = endTime;
            }
    
            @Override
            public int compareTo(meet o) {
                if(endTime - o.endTime == 0) {
                    return startTime - o.startTime;
                }
                return endTime - o.endTime;
            }
        }
    
        public static meet[] meets;
        static ArrayList<meet> selectMeet;
        public static int n;
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            n = scanner.nextInt();
            meets = new meet[n];
    
    
            for(int i = 0; i < n; i++) {
                meets[i] = new meet(scanner.nextInt(), scanner.nextInt());
            }
    
            Arrays.sort(meets);
    
            int count = 0;
            int max = 0;
    
            selectMeet = new ArrayList<>();
            selectMeet.add(new meet(0, 0));
    
            for (meet meet : meets) {
                if (selectMeet.get(selectMeet.size() - 1).endTime <= meet.startTime) {
                    selectMeet.add(meet);
                }
    
                count = selectMeet.size() - 1;
    
                if (count > max) {
                    max = count;
                }
            }
    
            System.out.println(max);
        }
    
    
    }
    

     

     객체를 이용하였고 Comparable 인터페이스의 CompareTo를 사용하여 끝나는 시간 기준으로 오름차순 정렬을 하였다.

     

    끝나는 시간 기준으로 오름차순 정렬을 한 이유는 최대한 많은 회의를 하려면 빨리 끝나는 회의들을 배정해야 하기 때문이다.

    'PS > Java' 카테고리의 다른 글

    [백준] 2667번: 단지 번호 붙이기  (0) 2021.03.09
    [백준] 2468번: 안전 영역  (0) 2021.03.09
    [백준] 2309번: 일곱 난쟁이  (0) 2021.03.09
    [백준] 1158번: 요세푸스 문제  (0) 2021.03.09
    [백준] 2164번: 카드2  (0) 2021.03.09

    댓글

Designed by Tistory.