모든 차를 단속할 수 있도록 설치하는 카메라의 최소 개수를 구하라
처음에 문제를 봤을 때, 차량마다 출발 지점을 기준으로 정렬을 하고 각 차량마다 겹치는 구간에 카메라를 두면 되겠다고 생각했다.
그러고 문제의 TC를 이 논리로 푸니까 개수가 안맞았다.
20분 동안 어떻게 풀지 고민했는데 답이 안나와서 스터디를 같이 하는 친구가 푼 코드에 주석을 읽고 어느정도 접근 방식을 알고 접근했다.
그 접근 방식은 아래와 같다.
import java.util.Arrays;
class Solution {
public int solution(int[][] routes) {
int answer = 0;
int[] cameras = new int[routes.length];
// 고속도로 탈출한 시점으로 정렬
Arrays.sort(routes, (a, b) -> a[1] - b[1]);
// 최근에 설치한 카메라 위치
int newCam = routes[0][1]; // 기본 값으로 첫번째 차량의 고속도로 나간 지점을 잡음
answer++; // 카메라 개수 1 증가
for (int i = 1; i < routes.length; i++) {
// 설치한 카메라가 다음 자동차의 출발지를 못잡는다면, 새로운 카메라 설치
if (routes[i][0] > newCam) {
newCam = routes[i][1];
answer++;
}
}
return answer;
}
}
Greedy라는걸 파악하기도 어렵고, 문제를 접근하는 아이디어조차 떠올리기 힘들었다.
Greedy는 미래를 생각안하고, 그 순간순간 가장 좋아보이는 최적의 선택을 하는 알고리즘 설계 기법... 이걸 어떻게 아냐...
많이 접해봐야 이게 그리디 문제인지 알 것 같다.