(프로그래머 레벨 3) 법 집행 카메라(욕심쟁이)(자바)

질문 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42884

프로그램 제작자

코드 중심 개발자를 고용하십시오. 스택 기반 위치 일치. 프로그래머를 위한 개발자별 프로필에 가입하고 기술 호환성이 좋은 회사와 연결하십시오.

프로그래머.co.kr

코딩테스트 전투>탐욕>과속카메라

문제 설명

고속도로를 운행하는 모든 차량이 고속도로를 이용하면서 단 한 번쯤은 단속 카메라를 만날 수 있도록 카메라를 설치할 계획입니다.

고속도로를 주행하는 차량의 경로를 인수로 하여 모든 차량이 법 집행 카메라를 한 번 이상 마주치도록 설치해야 하는 최소 카메라 수를 반환하는 솔루션 함수가 완성됩니다.

한계

  • 차량 수는 1대 이상 10,000대 미만입니다.
  • route는 차량의 이동 경로를 포함하고, route(i)(0)은 자동차 i가 고속도로에 진입하는 지점을 포함하고, route(i)(1)은 자동차 i가 고속도로를 떠나는 지점을 포함합니다.
  • 차량 출입구에 카메라가 설치되어 있어도 카메라를 만난 것으로 간주합니다.
  • 차량은 -30,000에서 30,000 사이의 입구 및 출구 지점이 있습니다.

입력 및 출력 예

노선 반품
((-20,-15), (-14,-5), (-18,-13), (-5,-3)) 2

I/O 예시 설명

카메라를 -5에 맞추면 두 번째와 네 번째 차가 카메라와 마주치게 됩니다.

-15에 카메라를 놓으면 첫 번째와 세 번째 자동차가 카메라를 만납니다.

내 코드

import java.util.*;

class Solution {
    public int solution(int()() routes) {
        int answer = 0;
        
        Arrays.sort(routes, (o1, o2) -> o1(1) - o2(1));
        // Arrays.sort(routes, new Comparator<int()>() {
        //     @Override
        //     public int compare(int() o1, int() o2) {
        //         return o1(1) - o2(1); 
        //     }
        // });
        
        int camPos = Integer.MIN_VALUE;
        for(int i=0; i<routes.length; i++) {
            if(camPos < routes(i)(0)) {
                camPos = routes(i)(1);
                answer++;
            }
        }
        
        return answer;
    }
}

설명하다

  1. 경로가 끝나는 지점인 경로 (i)(1)에 따라 주어진 차량의 경로를 오름차순으로 정렬합니다.
  2. 경로는 끝점을 기준으로 오름차순으로 배열되어 있기 때문에 가장 적은 수의 카메라가 설치되도록 첫 번째 자동차의 경로 끝점에 카메라를 설치합니다.
  3. 카메라가 설치된 지점이 다음 차량 경로의 시작점 및 설치 위치보다 크면 이 차량의 경로에도 카메라가 포함되어 있기 때문에 카메라를 설치할 필요가 없으며 경로가 통과하는 지점도 포함됩니다.
    스루 스타트는 설치 위치보다 크며, 카메라는 포함되어 있지 않으므로 카메라는 차량의 경로 끝에서 다음 차량과 비교합니다.
  4. 이러한 방식으로 설치를 반복하면 모든 차량 경로에 설치된 카메라의 수가 최소화됩니다.