반응형
1931번: 회의실배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
keypoint
하루에 최대로 열 수 있는 회의의 수를 구해야 하기 때문에 회의의 종료시간에 초점을 맞추어야 한다. 회의가 빨리 끝난다면 다음 회의를 열 수 있기 때문이다. 따라서 회의가 끝나는 시간을 기준으로 오름차순 정렬을 해야한다. 후에 회의가 끝나는 시간에 맞춰 다음 회의 시작시간이 가까운 회의부터 실행을 하면 답이 나온다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); //총 회의의 개수 입력
int [][]arr = new int [N][2]; //각 회의의 시작시간과 종료시간을 넣을 2차원 배열 생성
for(int i = 0; i<N; i++) {
arr[i][0] = sc.nextInt(); //각 회의의 시작시간과 종료시간을 입력
arr[i][1] = sc.nextInt();
}
Arrays.sort(arr,new Comparator<int[]>() { //회의시간을 정렬
@Override
public int compare(int[] arg0, int[] arg1) {
if(arg0[1] == arg1[1]) { //회의의 종료시간이 같다면
return Integer.compare(arg0[0],arg1[0]); //회의의 시작시간을 오름차순으로 정렬한다.
}
return Integer.cimpare(arg0[1],arg1[1]); //회의의 종료시간을 오름차순으로 정렬한다.
}
}
int time = 0; //임시로 다음 회의가 시작할 수 있는 시간을 담는 변수
int count = 0; //하루에 최대로 열 수 있는 회의의 수
for(int i = 0; i<N; i++) {
if(arr[i][0] >= time) { //이전 회의의 종료시간보다 해당 회의의 시작시간이 같거나 이후일 경우
count++;
time = arr[i][1]; // 회의의 종료시간을 time 변수에 담아준다.
}
}
sc.close();
System.out.println(count);
}
}
반응형
'프로그래밍 > algorithm' 카테고리의 다른 글
<프로그래머스> 문자열을 정수로 바꾸기 (0) | 2020.11.10 |
---|---|
<프로그래머스> 체육복 (0) | 2020.11.09 |
<프로그래머스> 같은 숫자는 싫어 (0) | 2020.11.08 |
<프로그래머스> 두 개 뽑아서 더하기 (0) | 2020.11.08 |
11047번 : 동전 0 (0) | 2020.11.08 |