[문제풀이] 단속카메라
업데이트:
문제 링크 : 단속카메라
풀이 시간 : 20분
1. 문제 풀이
모든 차량을 단속할 수 있는 카메라 최소 설치 개수를 구하는 문제
1) 리스트에 나간 지점 순으로 저장(같으면 들어온 지점 순으로)
2) 리스트에서 첫번째 차량 선택
3) 현재 카메라보다 들어온 지점이 오른쪽인지 판단
3-1) 오른쪽일 경우, 현재 카메라 위치를 그 차량의 나간 지점으로 변경 및 카메라 수 증가
4) 리스트가 빌 경우 종료, 아닐 경우 2번으로 이동
2. 소스 코드
public int solution(int[][] routes) {
// 가장 왼쪽에 있는 나간 지점 순으로 정렬 후 같으면 가장 왼쪽에 있는 들어온 지점순으로 정렬
PriorityQueue<Car> pq = new PriorityQueue<>(new Comparator<Car>() {
@Override
public int compare(Car o1, Car o2) {
if(o1.end<o2.end) {
return o1.end-o2.end;
}else if(o1.end==o2.end) {
return o1.start-o2.start;
}else {
return o1.end-o2.end;
}
}
});
for (int i = 0; i < routes.length; i++) {
pq.add(new Car(routes[i][0],routes[i][1]));
}
// 가장 왼쪽에 있는 나간 지점에 카메라 설치
int pivot = pq.poll().end;
int answer = 1;
while(!pq.isEmpty()) {
Car car = pq.poll();
// 현재 설치된 카메라 중 가장 오른쪽에 있는 지점보다 더 오른쪽 지점에서 들어 차량 검색
if(car.start>pivot) {
// 그 차량의 나간 지점에 카메라 설치
pivot= car.end;
answer++;
}
}
return answer;
}
class Car{
int start;
int end;
Car(int start,int end){
this.start= start;
this.end=end;
}
}
3. 후기
드디어 프로그래머스 level 2를 한 문제 빼고 다 풀었다.
블로그에는 level 2문제 풀이를 잘 올리지 않기 때문에 모를 수 도 있겠지만
드디어 본격적으로 level 3 문제를 풀게 되었다.