[programmers] 단속카메라 - Java

고속도로를 이동하는 차량들이 단속용 카메라를 최소한 한 번 만나도록 카메라를 설치하는 문제를 다루고 있다. 차량의 이동 경로를 기반으로 카메라 설치 위치를 결정하는 탐욕법을 사용하여, 차량의 진입 지점이 마지막 카메라 위치를 벗어날 경우 새로운 카메라를 설치한다. 예시로는 두 대의 카메라로 모든 차량을 단속할 수 있는 경우가 제시된다.
DriedPollack's avatar
Nov 19, 2024
[programmers] 단속카메라 - Java

단속카메라

문제 설명

고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.
고속도로를 이동하는 차량의 경로 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 지점에 카메라를 설치하면 첫 번째, 세 번째 차량이 카메라를 만납니다.
 

solution.java

import java.util.Arrays; class Solution { public int solution(int[][] routes) { // 출구를 기준으로 경로를 오름차순으로 정렬 Arrays.sort(routes, (a, b) -> Integer.compare(a[1], b[1])); int cameras = 0; int lastCameraPosition = Integer.MIN_VALUE; // 각 경로를 반복 for (int[] route : routes) { // 차량의 진입 지점이 마지막 카메라 위치를 벗어난 경우 if (route[0] > lastCameraPosition) { // 차량의 출구 지점에 새 카메라를 설치 lastCameraPosition = route[1]; cameras++; } } return cameras; } }
 

핵심 키워드

  • Arrays.sort(routes, (a, b) -> Integer.compare(a[1], b[1])); 해당 람다식을 통해 배열의 요소를 각각 비교해서 오름차순으로 정렬할 수 있다.
 

결론!

해당 문제를 풀면서 각 시점에서 가장 효율적인 답을 찾는 탐욕법을 익힐 수 있었다.
 
Share article

More articles

See more posts

👨🏻‍💻DriedPollack's Blog