https://programmers.co.kr/learn/courses/30/lessons/42884
풀이 : 탐욕 알고리즘
① 구간 시작위치가 가장 먼저인 구간부터 차례로 비교하면서 카메라의 설치 구간을 탐색
② 카메라가 설치된 구간과 route(자동차 통과구간)를 비교하면서 카메라 설치 구간을 줄여나감.
③ 겹치는 구간이 없으면 자동차 통과구간을 카메라 설치구간에 추가함.
구현 JAVA
import java.util.*;
public int solution(int[][] routes) {
//먼저 빠져나가는 거리 순으로 정렬
Arrays.sort(routes, (o1, o2) -> o1[0] - o2[0] );
List<int[]> cameraList = new ArrayList<>();
for( int[] route : routes ) {
//기존 카메라가 설치된 구간을 통과하는지 담을 변수
boolean isMeet = false;
for(int[] camera : cameraList) {
//카메라가 설치된 구간과 route(자동차 통과구간)를 비교하면서
//카메라 설치 구간을 줄여나감.
// 두 구간이 겹치는 부분이 있으면
if(camera[1] >= route[0] && camera[0] <= route[1]) {
// 카메라 구간의 시작위치보다 자동차 통과구간의 시작위치가 나중이면
if(camera[0] <= route[0] ) {
// 카메라 구간의 사직위치를 자동차 통과구간의 시작위치로 변경
camera[0] = route[0];
}
// 카메라 구간의 종료위치가 자동차 통과구간의 종료위치가 먼저면
if(camera[1] >= route[1]) {
// 카메라 구간의 종료위치를 자동차 통과구간의 종료위치로 변경
camera[1] = route[1];
}
isMeet = true;
}
}
//겹치는 구간이 없으면 자동차 통과구간을 카메라 설치구간에 추가함.
if(!isMeet) {
cameraList.add(route);
}
}
return cameraList.size();
}
'알고리즘 > 코딩테스트' 카테고리의 다른 글
프로그래머스 정수 삼각형 (0) | 2021.10.04 |
---|---|
프로그래머스 N으로 표현 (0) | 2021.10.04 |
프로그래머스 섬 연결하기 (0) | 2021.09.28 |
프로그래머스 이중우선순위큐 (0) | 2021.09.28 |
프로그래머스 디스크 컨트롤러 (0) | 2021.09.26 |