my study.

Coding Test/Programmers

[프로그래머스] 단속카메라, java

fftl 2025. 2. 21. 00:41

- 문제 

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

- 풀이

import java.util.*;

class Solution {
    
    /*
    해결방법을 찾기 어려웠던 문제입니다.
    처음에는 routes[i][0] 인자를 기준으로 오름차순 정렬을 진행했습니다.
    하지만 몇 테스트케이스에서 답을 찾지 못했고, 원인을 찾지 못했습니다.
    
    이후 검색을 하며 이의 예외 케이스를 알게되었습니다.
    [[2, 2],[0, 1],[-10,9]] <- 해당 케이스를 확인하면
    
    [-10, 9][0, 1],[2, 2] 로 정렬이 되겠지만, 최초의 카메라는 9에 위치하게 되며, 이는 다음 지점들을
    포함하지 못합니다.
    
    따라서 routes[i][1] 인자를 기준으로 정렬하여 탐색한다면 이를 해결할 수 있습니다.
    */
    
    
    public int solution(int[][] routes) {
        
        //주어진 routes를 routes[i][1]을 기준으로 오름차순 해줍니다.
        Arrays.sort(routes, new Comparator<int[]>(){
            @Override
            public int compare(int[] a, int[] b){
                return a[1]-b[1];
            }
        });
        
        //카메라의 개수 count, 이번에 놓을 카메라의 위치 num을 놓으며 탐색을 시작합니다.
        int count = 1;
        int num = routes[0][1];
        
        //for문을 통해 하나씩 나아가며 필요한 카메라를 찾습니다.
        for(int i=1; i<routes.length; i++){
            
            //이번 도로를 확인합니다.
            int[] now = routes[i];
            
            //이전의 카메라로 이번 고속도로를 확인할 수 있다면 넘어갑니다.
            if(now[0]<=num && num<=now[1]){
                continue;
                
            //이전의 카메라로 확인할 수 없다면 이번 고속도로의 끝점을 통해 카메라를 갱신해줍니다.
            } else {
                
                count++; //카메라 대수 증가
                num = now[1]; //새로운 카메라 갱신
            }
        }
        
        //이를 통해 얻은 count를 반환합니다.
        return count;
    }
}