- 문제
프로그래머스
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;
}
}
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 2 x n 타일링, java (0) | 2025.02.16 |
---|---|
[프로그래머스] 합승 택시 요금, java (0) | 2025.02.08 |
[프로그래머스] 가장 먼 노드, java (0) | 2025.02.08 |
[프로그래머스] 숫자 변환하기, java (0) | 2025.02.05 |
[프로그래머스] 택배상자, java (0) | 2025.02.04 |