C++:: 프로그래머스 < 요격 시스템 >

jahlee·2023년 4월 15일
0

프로그래머스_Lv.2

목록 보기
34/106
post-thumbnail

반례를 찾느라 좀 애를 많이 먹었다. 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를 갱신 시켜주어야 한다는 점이다.

0개의 댓글