코딩테스트/백준

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

플래시🦥 2023. 2. 2.
반응형

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

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net


한 개의 회의실을 최대한 많이 사용할 수 있도록 했을 때의 회의 개수를 구하는 문제이다. 

입력을 모두 받은 후 종료시간을 기준으로 정렬한다.

종료시간을 오름차순으로 정렬을 하면 빨리 끝내는 회의를 찾을 수 있고, 더 많은 회의를 할 수 있게 된다. 

 

 

Arrays.sort(time,new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				return o1[1]==o2[1] ? o1[0]-o2[0]:o1[1]-o2[1];
			}
		});

위 코드는 시작과 종료시간이 담겨져 있는 배열 time을 가지고 종료시간을 기준으로 정렬을 한 것이다. 

o[1]과 o[1]로 종료시간이 같다면, 시작시간으로 정렬하고, 다르다면 종료시간을 기준으로 정렬하도록 했다. 

 


<최종>

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

public class Main {
	
	static int N;
	static int[][] time;
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N =Integer.parseInt(br.readLine());	//회의의 최대개수 
				
		time = new int [N][2];
		int cnt=0;
		
		for(int i=0;i<N;i++) {
			String[] s = br.readLine().split(" ");
			time[i][0]=Integer.parseInt(s[0]);	//회의 시작시간 
			time[i][1]=Integer.parseInt(s[1]);	//회의 종료시간
		}
		Arrays.sort(time,new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				return o1[1]==o2[1] ? o1[0]-o2[0]:o1[1]-o2[1];
			}
		});
		
		int prev=0;
		for(int i=0;i<N;i++) {
			if(prev<=time[i][0]) {
				prev=time[i][1];
				cnt++;
			}
		}

		System.out.println(cnt);
		br.close(); 
		 
	}// main()
	
}// class Main

 

728x90
반응형

댓글