PS

[백준] 1931번 : 회의실 배정[Java]

devkdh 2025. 7. 8. 11:29

#풀이

import java.io.*;
import java.util.*;



public class Main {


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int N = Integer.parseInt(br.readLine());
        int[][] rooms = new int[N][2];
        int start,end;
        for(int i = 0; i<N; i++){
            st = new StringTokenizer(br.readLine());
            start = Integer.parseInt(st.nextToken());
            end = Integer.parseInt(st.nextToken());
            rooms[i][0] = start;
            rooms[i][1] = end;
        }
        Arrays.sort(rooms,(a,b)->{
            if(a[1]==b[1])return a[0]-b[0];
            return a[1]-b[1];
        });
        int ans = 1;
        int now = 0;
        int next = 1;
        while(true){
            if(rooms[now][1]<=rooms[next][0]){
                now = next;
                ans++;
            }
            next++;
            if(next>= rooms.length)break;

        }
        System.out.println(ans);
    }
}

#성능

#정리

1. 종료시간 오름차순으로 정렬하되, 종료시간이 같을 경우 시작시간 기준으로 정렬함.
2. now 포인터는 현재 선택된 회의 인덱스, next 포인터를 통해 다음 회의를 탐색하며, 현재 회의가 끝난 시점 이후에 시작하는 회의만 선택.