알고리즘/백준

[백준 1931] 그리드-회의실 배정 | JAVA

jiiihye 2022. 2. 6. 23:44

문제


문제에서 예시로 제시한 시간들을 정리해보면 겹치지 않는 시간은

(1,4), (5,7), (8,11), (12,14)임을 알 수 있다.

 


JAVA 정렬

java.util.Arrays 유틸리티 클래스를 사용해 배열을 정렬, 복제, 리스트로 변환 등의 작업을 할 수 있다.

sort()메서드로 오름차순 정렬이 가능하다. 이때, 오름차순인 이유는 Class 내에 Comparable Interface의 compareTo메서드가 기준이기 떄문이다.

 

오름차순이 아닌 다른 정렬조건으로 하려면 Class내에 구현된 Comparable인터페이스의 compareTo()메서드를 원하는 조건으로 오버라이드해서 compare()메서드를 원하는 조건으로 오버라이드해서 사용하면 된다.

 

예를 들면 밑에와 같은 방법으로 사용할 수 있다.

Integer[] arr = {3, 50, 30, 29, 59};

Arrays.sort(arr, new Comparator<Integer>() {
    @Override
    public int compare(Integer i1, Integer i2) {
        return i2 - i1;
    }
});

코드

package greedy;

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

public class num1931 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		int num = in.nextInt();	// 회의의 수 입력받음.
		int [][] time = new int[num][2];	// 회의의 수만큼 시작시간, 끝나는시간 입력받음. 행은 회의수만큼 열은 2개씩
		
		for(int i=0;i<num;i++) {
			time[i][0]=in.nextInt();	// 0열에는 시작시간
			time[i][1]=in.nextInt();	// 1행에는 끝나는 시간
		}
		
		// 정렬해주기
		Arrays.sort(time, new Comparator<int[]>() {
			@Override
			public int compare(int[] i1, int[] i2) {
				if(i1[1] == i2[1]) {
					return i1[0] - i2[0];
				}
				return i1[1] - i2[1];
			}
		});
		
		int count = 0;
		int end_time = 0;
		
		for(int i=0;i<num;i++) {	// 회의 수만큼 반복
			if(end_time<=time[i][0]) {	// 시작하는 시간이 전타임 끝나는 시간보다 많거나 같아야됨.
				end_time = time[i][1];	//	끝나는 시간이 다시 이전타임으로 변경
				count++;	// 가능한 회의 수 추가
			}
		}
		System.out.println(count);
	}
}

1931 백준 문제

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

 

1931번: 회의실 배정

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

www.acmicpc.net