티스토리 뷰
✅ 문제
- 차량의 진입~진출 구간은 범위로 주어집니다.
- 이 범위들이 겹치는 구간을 찾고, 그 구간의 끝부분에 카메라를 설치하면, 겹치는 모든 차량을 한 번에 단속할 수 있어요.
- 겹치지 않는 새로운 구간이 나오면, 새 카메라가 필요합니다.
✅ 문제해결 (정렬 + 그리디)
- 모든 차량 경로를 진출지점 기준으로 정렬
- 현재 카메라의 설치 위치를 추적 (camera = -30001로 초기화)
- 각 차량 경로를 보면서, 진입 지점 > camera라면 새로운 카메라 필요
JAVA 코드
import java.util.*;
class Solution {
public int solution(int[][] routes) {
// 1. 차량 경로를 진출지점 기준으로 정렬
Arrays.sort(routes, (a, b) -> Integer.compare(a[1], b[1]));
int camera = -30001; // 카메라 설치 위치
int count = 0;
for (int[] route : routes) {
int start = route[0];
int end = route[1];
// 현재 카메라가 이 차량 구간을 커버하지 못하면 새로 설치
if (camera < start) {
camera = end;
count++;
}
}
return count;
}
}
시간복잡도
- 정렬: O(N log N)
- 순회: O(N)
- 전체: O(N log N) → 매우 효율적!
'Algorithm' 카테고리의 다른 글
프로그래머스: 등굣길 (0) | 2025.04.24 |
---|---|
프로그래머스: N으로 표현 (0) | 2025.04.24 |
프로그래머스: 섬 연결하기 (0) | 2025.04.21 |
프로그래머스: 구명보트 최소 개수 계산 (0) | 2025.04.21 |
프로그래머스: 큰 수 만들기 (0) | 2025.04.21 |