import java.util.*;
class Solution {
public int solution(int[][] routes) {
int answer = 0;
//고속도로에서 나간 지점을 기준으로 정렬합니다.
Arrays.sort(routes,new Comparator<int[]>(){
@Override
public int compare(int[] o1, int[] o2) {
return o1[1]-o2[1];
}
});
//비교군을 넣기 위해 queue를 생성했습니다.
Queue<int[]> q = new LinkedList<>();
for (int i = 0; i < routes.length; i++) {
if(q.isEmpty() == true) { //비교군이 아무것도 없다면
q.add(routes[i]); // 비교군을 하나 설정합니다
answer++;
}
if(q.isEmpty() == false) { // 비교군이 있다면 비교를 진행합니다.
// 비교군의 나간 지점보다 i번째 자동차의 진입 지점이 낮다면
// 여전히 하나의 카메라로 단속이 가능합니다.
if(q.peek()[1]>= routes[i][0]) continue;
//위 조건을 만족하지 못한다면 비교군을 교체합니다.
q.poll();
q.add(routes[i]);
answer++;
}
}
return answer;
}
}
겹쳐진 값들의 시작시간 최댓값 ~ 겹쳐진 값들의 종료시간 최소값
이 됩니다.하지만 종료시간을 기준으로 정렬하면 기준's 종료시간>= 비교값's 시작시간
만 고려하면 됩니다.
그 이유는 다음과 같습니다.
정렬을 하지 않고 기준's 종료시간>= 비교값's 시작시간
만 생각하면 다음과 같은 문제가 발생합니다.