TIL (2022.02.11)
➕ 오늘 푼 문제
프로그래머스 - 단속카메라
➕ 아이디어
- 경로를 시작 위치를 기준으로 정렬한다.
- 이전까지 경로들이 함께 겹쳐지는 구간을 저장하는 변수를 만든다 (
start
, end
)
- 다음 경로들을 탐색하며
- 이전 경로들과 겹치는 구간이 있다면, 카메라를 설치하지 않고 겹치는 구간만 갱신한다.
- 겹치는 구간이 없다면, 카메라를 새로 설치하고 새로운 구간을 만든다.
➕ Java 코드
import java.util.*;
class Solution {
public int solution(int[][] routes) {
int answer = 1;
int start, end;
Arrays.sort(routes, new Comparator<int[]>(){
@Override
public int compare(int[] o1, int[] o2){
if(o1[0] == o2[0]){
return o1[1] - o2[1];
}else{
return o1[0] - o2[0];
}
}
});
start = routes[0][0];
end = routes[0][1];
for(int i=1; i<routes.length; i++){
int s = routes[i][0], e = routes[i][1];
if(start <= s && s <= end){
start = s;
end = Math.min(e, end);
}else{
answer += 1;
start = s;
end = e;
}
}
return answer;
}
}
➕ Python 코드
def solution(routes):
answer = 1
routes.sort()
start, end = routes[0][0], routes[0][1]
for s, e in routes:
if start <= s <= end:
start, end = s, min(e, end)
else:
answer += 1
start, end = s, e
return answer
➕ 궁금한 내용 및 소감
- 문제 아이디어에 대해서 어떤식으로 풀어야 할지는 감이 왔으나(정렬 사용, 겹치는 구간 파악 등), 구현하는 방법을 생각해내는 데 시간이 조금 걸린 문제였다. 그래도 혼자 힘으로 해결해서 다행이다!
➕ 참고 문헌