https://programmers.co.kr/learn/courses/30/lessons/42884
📄 제출 코드
// routes[i][0] 고속도로 진입지점
// routes[i][1] i번쨰 차량이 고속도로에서 나간 지점
// [-20,15]는 첫번째 차량이 -20진입 15에서 나감.
// [-14, 5]는 두번쨰 차량이 -14진입 -5에서 나감.
// [-18, -13]는 두번쨰 차량이 -18진입 -13에서 나감.
// [-5, -3]는 두번쨰 차량이 -5진입 -3에서 나감. 4
function solution(routes) {
let arr = [];
let answer = 0;
routes.forEach((el) => { arr.push(el) });
arr.sort((a, b) => { return a[1] - b[1] })
console.log(arr);
while (arr.length != 0) {
let pos = arr[0][1];
for (var i = 0; i < arr.length; i++) {
if (arr[i][0] <= pos) {
arr.splice(i,1);
i--;
}
}
answer++;
}
return answer;
}
let routes = [[-20, 15], [-14, -5], [-18, -13], [-5, -3]];
console.log(solution(routes));
처음에 바로 생각난 방법은 시작점만 모은 배열과 종료지점만 모은 배열을 따로 만들어
정렬 후 가장 작은 값과 가장 큰 값을 구해 그만큼 값을 0으로 채워놓은 객체를 하나만든다.
그래서 routes에 있는 범위만큼 +1씩 하여 값이 최대로 변하는 지점의 개수를 구하여 답을 도출 하려 하였다.
그러나 역시 실패하였고, 다른 방법을 찾다가 시간이 너무 오래걸려(약2시간) 다른 사람의 코드를 참고하였다.
방법은 이러하다.
가장 먼저 탈출하는 곳에 카메라를 설치하면, 그 이전에 출발하는 차들은 무조건 그 지점에서 카메라를 만나니까 배열에서 빼낸다. 그렇게 다 빼면 카메라(answer)를 +1한다.
배열이 다 비워지게되면 카메라 수가 출력된다.