본문 바로가기

알고리즘

백준 회의실배정-1931

www.acmicpc.net/problem/1931

 

1931번: 회의실배정

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

www.acmicpc.net

입력 순서가 정해지지 않았으므로 순서를 정렬해 준 뒤 그리디 알고리즘을 사용해서 제일 빨리 끝나는 시간을 선택해주면 된다. 

package BAEKJOON;

import java.util.Scanner;

public class MeetingRoomAssignment_1931 {
	public static int compare(int[][] arr, int i, int j) {
		if (arr[i][1] < arr[j][1]) {
			return -1;
		} else if (arr[i][1] > arr[j][1]) {
			return 1;
		} else {
			if (arr[i][0] < arr[j][0]) {
				return -1;
			} else if (arr[i][0] > arr[j][0]) {
				return 1;
			}
			return 0;
		}
	}
	
	public static void quickSort(int[][] arr, int l, int r) {
		int i, j, p = 0;
		do {
			i = l;
			j = r;
			p = (l + r)  >> 1;
			do {
				while (compare(arr, i, p) < 0)
					i++;
				while (compare(arr, j, p) > 0)
					j--;
				if (i <= j) {
					int[] tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
					if (p == i)
						p = j;
					else if (p == j)
						p = i;
					i++;
					j--;
				}
			} while (i <= j);
			if (l < j)
				quickSort(arr, l, j);
			l = i;
		} while (i < r);
	}
	
	public static int solution(int n, int[][] schedules) {
		quickSort(schedules, 0, n - 1);
		int result = 1;
		int confirmedEd = schedules[0][1];
		for (int i = 1; i < n; i++) {
			if (schedules[i][0] >= confirmedEd) {
				confirmedEd = schedules[i][1];
				result++;
			}
		}
		return result;
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int arr[][] = new int[n][2];
		for (int i = 0; i < arr.length; i++) {
			arr[i][0] = sc.nextInt();
			arr[i][1] = sc.nextInt();
		}
		sc.close();
		System.out.println(solution(n, arr));		
	}

}

'알고리즘' 카테고리의 다른 글

백준 별 찍기10-2447  (0) 2020.11.08
백준 쿼드트리-1992  (0) 2020.11.08
백준 미로탐색-2178  (0) 2020.11.08
백준 DFSBFS-1260  (0) 2020.11.08
백준 종이의 개수-1780  (0) 2020.11.08