PS/Problems
[Java] 백준 1931번 - 그리디 알고리즘
CalicoCat22
2021. 12. 26. 01:56
import java.util.*;
import java.io.*;
public class s2_1931 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[][] time = new int[N][2];
for (int i = 0; i < N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
time[i][0] = Integer.parseInt(st.nextToken());
time[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(time, (o1, o2) -> {
if(o1[0] == o2[0]){
return Integer.compare(o1[1],o2[1]);
}
else{
return Integer.compare(o1[0],o2[0]);
}
});
// 회의 시작 시간 순서대로 이중 배열을 정렬
// 시작이 같으면 끝나는 시간으로 정렬 -> (1,5),(1,1) 순서면 카운트 안되기 때문
int cnt = 0;
int end = -1;
for (int i = 0; i < N; i++){
if (end == -1){
end = time[i][1];
}
else if (end <= time[i][0]){
cnt++;
end = -1;
i--;
}
else{
end = Math.min(end, time[i][1]);
}
}
// 회의가 최대한 일찍 끝나는 시간(end)에 대한 그리디 알고리즘
// 시작 시간, 끝나는 시간 모두 end보다 적으면 end를 변경
if (end != -1) cnt++;
System.out.println(cnt);
}
}