본문 바로가기

백준/그리디

회의실 배정

728x90

문제

한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.

입력

첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.

출력

첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다.

예제 입력 1 복사

11 1 4 3 5 0 6 5 7 3 8 5 9 6 10 8 11 8 12 2 13 12 14

예제 출력 1 복사

4

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

 

1931번: 회의실 배정

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

www.acmicpc.net

package BaekJoon.Greedy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class 회의실배정 {

	static int n;
	
	static class Pair{
		int x,y;
		Pair(int x, int y){
			this.x=x;
			this.y=y;
		}
	}
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.parseInt(br.readLine());
		StringTokenizer st; 
		Pair[]arr = new Pair[n];
		for(int i=0; i<n; i++) {
			
			st= new StringTokenizer(br.readLine());
			int s = Integer.parseInt(st.nextToken());
			int e = Integer.parseInt(st.nextToken());
			arr[i] = new Pair(s,e);
			
		}
		
		Arrays.sort(arr, new Comparator<Pair>() {
			
		

			@Override
			public int compare(Pair o1, Pair o2) {
				
				if(o1.y==o2.y) {
					return o1.x-o2.x; // 끝나는 시간이 같을경우 시작시간이 빠른게 앞으로
				}
				return o1.y-o2.y;
			
			}
		});
		
		int s = arr[0].x;
		int e = arr[0].y;
		int cnt =1;
		int ns=s;
		int ne=e;
		for(int i=1; i<n; i++) {
			
			ns=arr[i].x;
			ne=arr[i].y;
			if(e<=ns) {
				cnt++;
				s=ns;
				e=ne;
			}
			
			
		}
		
		System.out.println(cnt);
		
	}
}

- 끝나는 시간이 같을 때 시작하는 시간 기준으로 오름차순 정렬하는 것 중요!

'백준 > 그리디' 카테고리의 다른 글

설탕배달-2839번 (Java)  (0) 2021.08.22
에너지 드링크  (0) 2021.04.12
2+1 세일  (0) 2021.04.12
ATM  (0) 2021.04.05
알바생 강호  (0) 2021.04.02