1
+ //https://github.com/codeisneverodd/programmers-coding-test
2
+ //완벽한 정답이 아닙니다.
3
+ //정답 1 - jaewon1676
4
+ function solution ( routes ) {
5
+ let cctv = 1 ; // cctv의 개수는 최소 1개
6
+ routes . sort ( ( a , b ) => a [ 0 ] - b [ 0 ] ) ; // 고속도로 진입 시점을 기준으로 오름차순 정렬
7
+ // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ]
8
+ let out = routes [ 0 ] [ 1 ] ; // -15
9
+ // 나간 시점(out)은 첫 차량의 나간시점으로 초기화
10
+
11
+ for ( let i = 1 ; i < routes . length ; i ++ ) {
12
+ // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치
13
+ if ( out < routes [ i ] [ 0 ] ) {
14
+ cctv ++ ;
15
+ out = routes [ i ] [ 1 ] ; // out 시점 업데이트
16
+ }
17
+
18
+ // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우
19
+ if ( out > routes [ i ] [ 1 ] ) {
20
+ out = routes [ i ] [ 1 ] ; // out 시점 업데이트
21
+ }
22
+ }
23
+
24
+ return cctv ;
25
+ }
26
+ // 그리디
27
+
28
+ // 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다.
29
+ // 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는
30
+ // 나간시점만 검사 해주면 됩니다.
31
+
32
+ // 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다.
33
+ // 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면)
34
+ // cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다.
0 commit comments