처음에는 진입지점을 기준으로 오름차순으로 정렬해서 카메라가 진출지점이 있다고 가정하고 다음 경로의 진입지점과 비교했다. 그리고 다음 카메라는 다음 경로의 진출지점에 설치했다.
이렇게 하면 한 경로에 여러 경로가 포함될 경우 (ex) [0,10] ,[-1,3].[5,7]) 카메라가 3다음에 10으로 가게 된다.
->경로를 진출시점을 기준으로 오름차순으로 정렬해줘야한다.
풀이
1. 경로를 진출시점으로 오름차순 정렬한다. 진출시점이 같다면 진입시점이 더 빠른 순으로 정렬한다.
2. 맨 앞의 경로부터 탐색한다. 카메라는 진출시점에 설치한다.
3. 다음 경로의 진입시점이 카메라의 위치보다 크다면 새로운 카메라를 설치한다.
4. 이미 진출 시점으로 오름차순 정렬을 해주었기 때문에 진입시점과 카메라의 위치만 비교해주면 된다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool cmp(vector<int>a,vector<int>b ){
if(a[1]<b[1])
return true;
else if(a[1]==b[1])
return a[0]<b[0];
else
return false;
}
int solution(vector<vector<int>> routes) {
int answer = 1;
//진출 지점으로 오름차순 정렬
sort(routes.begin(),routes.end(),cmp);
int routes_size = routes.size();
//카메라가 차의 이동경로에 포함되는지 검사
int camera_point = routes[0][1], next_routes_begin = 0,next_routes_end;
for(int i = 1;i<routes_size;i++){
next_routes_begin = routes[i][0];
next_routes_end = routes[i][1];
if( next_routes_begin > camera_point ){
answer++;
camera_point = next_routes_end;
}
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 등굣길 c++ (0) | 2024.02.02 |
---|---|
[프로그래머스] N으로 표현 c++ (0) | 2024.02.01 |
[프로그래머스] 섬 연결하기 c++ (1) | 2024.01.29 |
[프로그래머스] 구명보트 c++ (1) | 2024.01.29 |
[프로그래머스] 큰 수 만들기 c++ (0) | 2024.01.29 |