고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.
고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지를 return 하도록 solution 함수를 완성하세요.
차량의 대수는 1대 이상 10,000대 이하입니다.
routes에는 차량의 이동 경로가 포함되어 있으며 routes[i][0]에는 i번째 차량이 고속도로에 진입한 지점, routes[i][1]에는 i번째 차량이 고속도로에서 나간 지점이 적혀 있습니다.
차량의 진입/진출 지점에 카메라가 설치되어 있어도 카메라를 만난것으로 간주합니다.
차량의 진입 지점, 진출 지점은 -30,000 이상 30,000 이하입니다.
먼저 오름차순으로 정렬해 준 뒤에 진출시점을 저장하여 나가는 시점이 진입 시점 이하잏때 카메라의 개수를 증가시키는 방식으로 구현을 하면 될것 같았다. 또한 카메라의 최소개수를 구하는 것이 문제이기에 진출시점을 계속 저장해 두었다가 진입시점보다는 크다는 가정하에 진출시점또한 비교하여 진출시점이 최소값을 가지도록 해주었다.
#include <string>
#include <vector>
#include<algorithm>
using namespace std;
int solution(vector<vector<int>> routes) {
sort(routes.begin(),routes.end());
int size=routes.size();
int count=0;
int out=routes[0][1];
for(int i=0;i<size;i++){
if (out < routes[i][0]) {
count++;
out = routes[i][1];
}
if (out >= routes[i][1]) out = routes[i][1];
}
return count;
}
위와 같은 코드를 작성하여 보았고 이코드를 사용했을때 테스트케이스를 실행했을때 결과보다 1적은 값이 나와 반환값을 1증가시켜 보았더니 통과하였다.
#include <string>
#include <vector>
#include<algorithm>
using namespace std;
int solution(vector<vector<int>> routes) {
sort(routes.begin(),routes.end());
int size=routes.size();
int count=0;
int out=routes[0][1];
for(int i=0;i<size;i++){
if (out < routes[i][0]) {
count++;
out = routes[i][1];
}
if (out >= routes[i][1]) out = routes[i][1];
}
return count+1;
}

방법은 금방 떠올렸지만 구현과정에서 카메라의 개수를 증가시키고 out을 업데이트할때 i+1의 값으로 업데이트 했다가 몇번 틀렸는데 풀이 방법자체는 쉽게 떠올렸는데 구현에서 조금 헤매서 문제들을 더 풀어봐야 할것 같다.