본문 바로가기
Coding/Coding Test Bookmark

[Coding Test Bookmark]단속 카메라(Java, LEV3)

by Thompson 2025. 1. 24.
728x90

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

고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지를 return 하도록 solution 함수를 완성하세요.

제한사항
차량의 대수는 1대 이상 10,000대 이하입니다.
routes에는 차량의 이동 경로가 포함되어 있으며 routes[i][0]에는 i번째 차량이 고속도로에 진입한 지점, routes[i][1]에는 i번째 차량이 고속도로에서 나간 지점이 적혀 있습니다.
차량의 진입/진출 지점에 카메라가 설치되어 있어도 카메라를 만난것으로 간주합니다.
차량의 진입 지점, 진출 지점은 -30,000 이상 30,000 이하입니다.


입출력 예
routes return
[[-20,-15], [-14,-5], [-18,-13], [-5,-3]] 2


입출력 예 설명
-5 지점에 카메라를 설치하면 두 번째, 네 번째 차량이 카메라를 만납니다.
-15 지점에 카메라를 설치하면 첫 번째, 세 번째 차량이 카메라를 만납니다.

 

import java.util.*;

class Solution {
    public int solution(int[][] routes) {
        Arrays.sort(routes, (a, b) -> Integer.compare(a[1], b[1]));
        
        int count = 0;
        int lastCamera = Integer.MIN_VALUE; //int의 최소값
        System.out.println(lastCamera);
        for (int[] route : routes) {
            if (lastCamera < route[0]) {
                count++;
                lastCamera = route[1];
            }
        }

        
        //for (int[] route : routes) {
            //System.out.println(Arrays.toString(route));
        //}
        return count;
    }
}

 

Arrays.sort(routes, (a, b) -> Integer.compare(a[1], b[1]));

람다식 구조

(a, b) -> Integer.compare(a[1], b[1])는 Comparator를 간단하게 작성한 람다식

  • a와 b :
  • a와 b는 routes 배열의 두 요소를 나타냅니다.
  • 즉, a와 b는 2차원 배열의 한 행(1차원 배열)입니다. 예: a = {-20, -15}, b = {-14, -5}

 

  • a[1]와 b[1] :
  • a[1]은 배열 a의 두 번째 요소(진출 지점), b[1]은 배열 b의 두 번째 요소(진출 지점)를 나타냄

 

  • Integer.compare(a[1], b[1]) :
    • 두 숫자를 비교하여, 결과를 반환
    • a[1] < b[1]이면 음수 반환 → a가 b보다 앞에 위치.
    • a[1] == b[1]이면 0 반환 → a와 b의 순서를 유지.
    • a[1] > b[1]이면 양수 반환 → a가 b보다 뒤에 위치.
  • 람다식 전체 :
  • (a, b) -> Integer.compare(a[1], b[1])는 정렬 기준을 지정하는 Comparator 역할을 합니다.
  • 이 경우, 2차원 배열의 두 번째 요소(a[1], b[1])를 기준으로 오름차순 정렬합니다.

 

Integer.MIN_VALUE

Integer.MIN_VALUE는 자바에서 사용할 수 있는 정수형(int)의 최소값을 나타내는 상수입니다.

java.lang.Integer 클래스에서 제공하며, -2,147,483,648이라는 값을 가지고 있습니다.