문제링크
https://www.acmicpc.net/problem/1931
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); //회의의 최대 개수
Meeting m[] = new Meeting[N];
for(int i=0;i<N;i++) {
m[i] = new Meeting(sc.nextInt(),sc.nextInt());
}
List<Meeting> list = getSchedule(m);
System.out.println(list.size());
}
static class Meeting implements Comparable<Meeting>{
int start;
int end;
public Meeting(int start, int end) {
super();
this.start = start;
this.end = end;
}
@Override
public int compareTo(Meeting o) {
// TODO Auto-generated method stub
int diff = end - o.end;
if(diff != 0) {
//종료 시간이 다르면
return diff;
}
return start-o.start; //종료시간이 같을 경우 시작시간이 빠른 순으로 정렬
}
}
static List<Meeting> getSchedule(Meeting[] m){
List <Meeting> sche = new ArrayList<>();
Arrays.sort(m); //회의실 종료 시간 순으로 정렬
sche.add(m[0]); //첫번째 회의 확정
for(int j=1;j<m.length;j++) {
// 확정된 앞 회의의 종료시간이 다음 회의시작보다 같거나 크다면 회의 확정
if(sche.get(sche.size()-1).end <= m[j].start) {
sche.add(m[j]);
}
}
return sche;
}
}
회의실 객체를 생성해서 Comparable을 구현한다.
Comparable을 통해 정렬 기준을 만들어 준다. 정렬 기준은 끝나는 순간 기준으로 정렬되어지게 한다.
입력받은 회의실을 정렬해 준 후
앞 회의의 종료시간이 다음 회의시작보다 같거나 크다면 다음 회의를 확정시키고 list에 add해준다.
후에 main에서 list.size를 출력해주면 최대로 배정할 수 있는 회의 수가 출력된다.
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA]백준_15686_치킨배달 (0) | 2021.02.17 |
---|---|
[JAVA]백준_2567_색종이2 (0) | 2021.02.17 |
[JAVA]백준_2961_도영이가 만든 맛있는 음식 (1) | 2021.02.16 |
[JAVA]백준_10972_다음순열 (0) | 2021.02.16 |
[JAVA]백준_10026_적록색약 (0) | 2021.02.15 |