1 분 소요

문제

고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.

고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면

최소 몇 대의 카메라를 설치해야 하는지를 return


영향 문제 (effect problem)

특정 task를 진행했을 때 문제 상황에 영향을 주기 때문에 특정 task를 진행할 때 마다 해당 변화를 적용해야한다

영향 ‘범위’를 특정하기 때문에 특정 조건으로 정렬하는게 우선되는 경우가 많다


핵심 아이디어

진출/진입 가로 그래프가 이어져있지 않은 부분을 기준으로 그룹을 나눠 각각 감시 카메라를 설치한다

=> 가장 먼저 나가는 차량부터 진출 지점을 기준으로 카메라를 설치한 후, 이후에 나가는 차량들을 검사


코드
import java.util.* ; 
class Solution {
    public int solution(int[][] routes) {
        // 1. 차들을 '나간지점'을 기준으로 오름차순 
        // 	[-18, -16], [-20, -15], [-14, -5], [-5, -3]
        ArrayList<Car> list = new ArrayList<>() ; 
        for(int i = 0 ; i < routes.length ; i++){
            Car car = new Car(routes[i][0], routes[i][1]) ; 
            list.add(car) ; 
        } // for 
        Collections.sort(list, (a,b) -> {  // 비교하는 두 Car 
            return Integer.compare(a.out, b.out) ; // 진출 시점으로 정렬 
        }) ; 
            
        // 2. 감시 카메라 설치 --> 해당 감시카메라로 찍을 수 있는 차 확인 
        boolean[] included = new boolean[list.size()] ; 
        // 해당 차가 감시카메라 영역에 포함되었는지 여부 
        
        int camera = 0 ; 
        for(int i = 0 ; i < list.size() ; i++){
            if(included[i]) 
                continue ; 
            
            camera++ ; // 감시 카메라에 포함되지 않으면, 새로운 감시카메라 설치
            // 해당 감시 카메라 영역에 포함되는 차들 검사 
            for(int j = i+1 ; j < list.size(); j++){
                // 검사 대상 차들은 감시카메라 지점보다 더 늦게 나감  
                if(list.get(i).out >= list.get(j).in){
                    // 진출 시점이 감시카메라 설치 위치보다 이전이면  
                    included[j] = true ; // 해당 차는 감시카메라 지점보다 이전에 들어오고, 이후에 나가는 것 ==> 해당 감시카메라 영역에 포함
                } // if 
            } // j             
        } // i
        // 3. 최종적인 감시카메라 갯수 반환 
        return camera ; 
        
    } // solution 
} // class 

class Car{
    int in ; 
    int out ; 
    
    public Car(int in, int out){
        this.in = in ; 
        this.out = out ; 
    }
}


댓글남기기