https://programmers.co.kr/learn/courses/30/lessons/42884
코딩테스트 연습 - 단속카메라
[[-20,-15], [-14,-5], [-18,-13], [-5,-3]] 2
programmers.co.kr
그리디 알고리즘, Level 3 문제이며 문제를 자세히 보면 카메라가 종료되는 시점 기준으로 각 구간별 체크를 하면 되는 유형이다.
전출 지점에 카메라를 설치하고, 다른 차량의 전입, 전출 시점을 체크하고 있다면 체크하고 넘어가는 방식으로 넘어가면 된다.
코드에 대한 설명은 아래와 같습니다.
- routes 를 종료 시점 기준으로 정렬, 종료 시점이 같으면 시작 시점이 더 빠른 시점 기준 정렬
- 종료 시점 기준으로 비교하면서, 카메라를 설치할 수 있는지 체크하고 있다면 answer 값 1씩 증가
코드는 아래와 같습니다.
import java.util.*;
class Solution {
public static int solution(int[][] routes) {
int answer = 0;
Arrays.sort(routes, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[1] == o2[1]) return Integer.compare(o1[0],o2[0]);
return Integer.compare(o1[1],o2[1]);
}
});
boolean visit[] = new boolean[routes.length];
for (int i = 0; i < routes.length; i++) {
if (visit[i] == true) continue;
int end = routes[i][1];
boolean canInstall = false;
for (int j = 0; j < visit.length; j++) {
if (visit[j] == false && routes[j][0] <= end && end <= routes[j][1]) {
visit[j] = true;
canInstall = true;
}
}
if (canInstall) answer++;
}
return answer;
}
}'코딩테스트' 카테고리의 다른 글
| [프로그래머스] [1차] 뉴스 클러스터링 (0) | 2022.05.08 |
|---|---|
| [프로그래머스] 징검다리 (0) | 2022.05.08 |
| [프로그래머스] 섬 연결하기 (0) | 2022.05.07 |
| [프로그래머스] 자물쇠와 열쇠 (0) | 2022.05.06 |
| [프로그래머스] 숫자 문자열과 영단어 (0) | 2022.05.02 |