smooth waters run deep

1d-1c/BOJ

1931_회의실배정 (JAVA)

yeon_11 2020. 11. 5. 17:56
 

1931번: 회의실배정

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

www.acmicpc.net

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	static class Arr implements Comparable<Arr>{
		int start; int end;
		public Arr(int start, int end){
			this.start = start; this.end = end;
		}
		@Override
		public int compareTo(Arr arr){ //end기준으로 오름차순정렬
			if(this.end > arr.end)
				return 1;
			if(this.end == arr.end){ //start도 오름차순 정렬
				if(this.start > arr.start)
					return 1;
			}
			return -1;
		}
	}

	public static void main(String[] args) {
		Scanner sc= new Scanner(System.in);
		int N = sc.nextInt();

		Arr[] arr = new Arr[N];
		for(int i=0; i<N; i++){
			int x = sc.nextInt();
			int y = sc.nextInt();
			arr[i] = new Arr(x, y);
		}

		Arrays.sort(arr);

		int ans = 0;
		int endpoint = -1; //시간 최소값=0 이므로 더 작은값으로 설정

		for(int i=0; i<N; i++){
			if(endpoint <= arr[i].start){
				endpoint = arr[i].end;
				ans++;
			}
		}
		System.out.println(ans);
	}
}

 

 

1. 회의실을 가장 많이 배정해야 하므로, 회의가 끝나는 시간과 시작하는 시간을 비교하며 카운팅해야한다.

 

2. 가장 먼저 시작하는 회의를 결정하는 것이 중요하다.

   '끝나는 시간'을 기준으로 정렬한다. ('시작하는 시간'도 오름차순으로 정렬해야 한다)

   왜냐면 - '끝나는 시간'이 작을 수록 '시작하는 시간'이 빨라지고, 회의실 배정을 더 많이 할 수 있기 때문!

 

3. 정렬이 된 배열을 0부터 탐색한다.

   끝나는 시간 <= 시작하는 시간 의 조건을 만족하면 ans++

 

 

 

회의가 끝나는 시간을 오름차순으로 정렬했을 때 - 첫 번째 원소, 즉 가장 빨리 끝나는 회의를

시작으로 회의실을 배정해야 한다고 잘못 생각해서 오래 걸렸다ㅠㅠ 내 맘대로 결정하지 말아야지..!

 

 

'1d-1c > BOJ' 카테고리의 다른 글

1182_부분수열의 합 (JAVA)  (0) 2020.11.08
3273_두 수의 합 (JAVA)  (0) 2020.11.07
2108_통계학 (JAVA)  (0) 2020.11.04
10989_수 정렬하기3 (JAVA)  (0) 2020.11.03
2751_수 정렬하기2 (JAVA)  (0) 2020.10.29