Lv.3 단속카메라

https://school.programmers.co.kr/learn/courses/30/lessons/42884

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1차원 int[] 배열을 요소로 갖는 2차원 int[][] 배열은 Arrays.sort로 정렬할때

매개변수로 익명 comparable 구현 객체(람다)를 사용할 수 있다는걸 깜빡하고 정렬을 우선순위 큐로 했다.

기본 타입인 int 타입을 요소로 갖는 1차원 int[] 배열을 정렬할 경우엔 사용이 불가한데 이점과 헷갈렸다.

그리고 범위를 저장할 필요없이 진출 지점만 저장해놓고 비교해보면 되는데 배열을 사용했다.

이 부분 또한 개선해야겠다.

// 기존 코드
import java.util.PriorityQueue;

class Solution {
    public int solution(int[][] routes) {
        int cnt = 1;
        PriorityQueue<int[]> pq = new PriorityQueue<>((arr1, arr2) -> arr1[0] - arr2[0]);
        for (int[] route : routes) {
            pq.add(route);
        }
        int[] route = pq.poll();
        
        while (!pq.isEmpty()) {
            int[] nextRoute = pq.poll();
            if (route[1] < nextRoute[0]) {
                route = nextRoute;
                cnt++;
                continue;
            }
            route[0] = nextRoute[0];
            route[1] = Math.min(route[1], nextRoute[1]);
        }
     
        return cnt;
    }
}
// 개선 코드
import java.util.Arrays;

class Solution {
    public int solution(int[][] routes) {
        Arrays.sort(routes, (arr1, arr2) -> arr1[0] - arr2[0]); // 진입 지점이 빠른순으로 정렬
        int cnt = 1; // 차량 대수는 1대 이상이므로 카메라 1대는 반드시 세워진다고 보고 두번째 차량부터 확인할 것이다.
        int outPoint = routes[0][1]; // 첫번째 차량의 진출 지점이자 카메라가 기존 차량들을 커버할 수 있으면서 설치 가능한 최대 지점
        
        for (int i = 1; i < routes.length; i++) { // 2번째 ~ 마지막 차량을 확인
            int[] nextRoute = routes[i]; // 다음 차량의 진입, 진출 지점
            if (outPoint < nextRoute[0]) { // 다음 차량이 기존 카메라의 최대 설치 지점보다 먼 곳에서 진입하면 true
                outPoint = nextRoute[1]; // 카메라를 한대 더 세우고 카메라의 최대 설치 지점을 갱신한다.
                cnt++; // 카메라 대수 증가
                continue; // 다음 차량을 확인
            }
            // 다음 차량이 세워둔 카메라로 커버되는 경우
            if (outPoint > nextRoute[1]) { // 다음 차량의 진출 지점이 카메라의 커버 범위보다 작다면 true
                outPoint = nextRoute[1]; // 현재 카메라의 최대 설치 지점을 다음 차량의 진출 지점으로 갱신한다.
            }
        }
     
        return cnt; // 카메라 대수 return
    }
}

'문제 풀이 > 프로그래머스' 카테고리의 다른 글

Lv.3 기지국 설치  (1) 2023.06.02
Lv.3 숫자 게임  (0) 2023.06.02
Lv.3 등굣길  (1) 2023.05.30
Lv.2 유사 칸토어 비트열  (0) 2023.05.29
Lv.3 단어 변환  (0) 2023.05.29
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유