메모리: 58.9 MB, 시간: 8.14 ms
코딩테스트 연습 > 탐욕법(Greedy)
정확성: 50.0
효율성: 50.0
합계: 100.0 / 100.0
2025년 02월 03일 14:17:51
고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.
고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지를 return 하도록 solution 함수를 완성하세요.
제한사항
- 차량의 대수는 1대 이상 10,000대 이하입니다.
- routes에는 차량의 이동 경로가 포함되어 있으며 routes[i][0]에는 i번째 차량이 고속도로에 진입한 지점, routes[i][1]에는 i번째 차량이 고속도로에서 나간 지점이 적혀 있습니다.
- 차량의 진입/진출 지점에 카메라가 설치되어 있어도 카메라를 만난것으로 간주합니다.
- 차량의 진입 지점, 진출 지점은 -30,000 이상 30,000 이하입니다.
입출력 예
routesreturn
[[-20,-15], [-14,-5], [-18,-13], [-5,-3]] | 2 |
입출력 예 설명
-5 지점에 카메라를 설치하면 두 번째, 네 번째 차량이 카메라를 만납니다.
-15 지점에 카메라를 설치하면 첫 번째, 세 번째 차량이 카메라를 만납니다.
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
풀이
dfs로 모든 경우를 다 탐색하는 걸 생각했지만 시간복잡도가 너무 높게 나왔다.
정렬을 이용해 nlogn으로 풀이했다.
각 고속도로의 시작 부분을 기준으로 오름차순 정렬을 시킨다.
이후 현재 고속도로의 최댓값보다 더 큰 시작 지점을 가진 고속도로가 나오면 cctv의 개수를 늘리고
고속도로의 최댓값을 더 큰 시작 지점을 가진 고속도로의 끝나는 지점으로 만든다.
최댓값이 초기화되는 경우는 한 가지가 더 있다. 바로 현재 최댓값보다
현재 탐색중인 고속도로의 끝나는 지점이 더 작은 경우이다. 이 경우에는 cctv의 개수는 늘리지 않고 최댓값만 변경해준다.
코드
class Solution {
public static int solution(int[][] routes) {
// 첫 번째 원소 기준으로 오름차순 정렬
Arrays.sort(routes, (a, b) -> Integer.compare(a[0], b[0]));
int max = routes[0][1];
int cnt = 1;
for (int[] route : routes) {
if(max > route[1]){
max = route[1];
}
if (max < route[0]) {
cnt++;
max = route[1];
}
}
return cnt;
}
}
'코딩 테스트 연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level3 정수 삼각형 (JAVA) (0) | 2025.03.03 |
---|---|
[프로그래머스] Level2 두 큐 합 같게 만들기 (JAVA) (0) | 2025.02.06 |
[프로그래머스] Level3 베스트앨범 (JAVA) (1) | 2025.01.26 |
[프로그래머스] Level3 야근 지수 (JAVA) (0) | 2025.01.24 |
[프로그래머스] Level3 보석 쇼핑 (JAVA) (0) | 2025.01.22 |