반례를 찾느라 좀 애를 많이 먹었다. s는 더 크지만 e가 일찍끝나는 경우에 대한 고려를 해주어야 한다.
예시) [[0, 4], [5, 10], [6, 8], [8, 9]] == 3
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> targets)
{
int answer = 0, idx = 0;
sort(targets.begin(), targets.end());//오름차순 정렬
while (idx < targets.size())
{//요격을 다할때까지
int end = targets[idx++][1];// 타겟의 e 설정
answer++;
while (idx < targets.size() && targets[idx][0] < end)
{// end 보다 해당 타겟의 s가 작다면 밀어준다.
// 해당 타깃이 end를 설정해 놓은 타겟보다 end가 작을 때 갱신
if (targets[idx][1] < end) end = targets[idx][1];
idx++;
}
}
return answer;
}
풀이의 핵심은 오름차순 정렬을 한뒤 현재 타깃의 e보다 s가 작은 타겟들은 쭉 넘기는 것이다. 이때 주의해야할 점은 이전에도 말했듯이 현재 타겟의 e보다 e가 작은 타겟이 등장하였을때 end를 갱신 시켜주어야 한다는 점이다.