문제 정보

풀이

최대한 많은 차량이 겹치는 지점에 카메라를 설치할 수 있도록, 각 차량을 반드시 단속할 수 있는 한계선(진출 시점)에 카메라를 설치하는 그리디 전략을 사용한다.

이를 위해서 진출 시점을 기준으로 오름차순 정렬한다.

진입 시점을 기준으로 정렬하면 긴 구간 안에 짧은 구간이 포함된 경우, 짧은 구간의 진출 시점을 놓쳐 카메라를 불필요하게 추가 설치하게 된다.

  • e.g routes = [[-20, 10], [-10, -5], [-3, 5]]
    • 이 경우 답은 2지만, 진입 시점을 기준으로 정렬할 경우 3이 반환된다.

또한 진출 시점을 기준으로 정렬해야 ‘(해당 차량을 단속하기 위해서는) 최소한 이 지점에는 카메라를 설치해야 한다’는 한계선이 명확해진다. 동시에, 최대한 뒤에 설치해야 다른 차량과 겹칠 확률이 높아지기 때문에 진출 시점에 설치하는 것이 유리하다.

코드

import java.util.*;
 
class Solution {
    public int solution(int[][] routes) {        
        Arrays.sort(routes, new Comparator<int[]>() {
            @Override
            public int compare(int[] a, int[] b) {
                return a[1] - b[1];
            }
        });
        
        int camera = routes[0][1];
        int answer = 1;
        
        for(int[] route : routes) {
            if (route[0] > camera) {
                answer++;
                camera = route[1];
            }
        }
        
        return answer;
    }
}