티스토리 뷰

요약

  • routes 오름차순 정렬
  • 카메라 범위 설정풀이과정순서대로 routes를 체크하기 위해 sort해준다.
    예제[[-20,-15], [-14,-5], [-18,-13], [-5,-3]]의 경우
    [[-20,-15], [-18,-13],[-14,-5],[-5,-3]] 으로 정렬한단 얘기
    이후 각 자동차마다 camera 설치 가능 범위를 정한다.

맨 처음 자동차를 감시할 수 있는 범위

두번째의 경우 (-18,-15)로 줄어든다.

세 번째의 경우 더이상 하나의 카메라로 감시할 수 없게 됐다.

검사 조건은 camera 범위의 end값과 routes[i][0] 값을 비교하면 된다.

이런 식으로 구현하였다.

코드

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int solution(vector<vector<int>> routes) {
    int answer = 1;
    int start = 0;
    int end = 0;
    bool cam = false;
    sort(routes.begin(), routes.end());
    for(int i = 0; i < routes.size(); i++)
    {
        if(routes[i][0] > end)
        {    //현재 범위(start,end)를 벗어나는 차량
            cam = false;
            answer++;
        }

        if(cam == false)    //새로운 카메라 범위 시작
        {
            cam = true;
            start = routes[i][0];
            end = routes[i][1];
        }
        else    //카메라 범위 업데이트
        {
            start = routes[i][0];
            end = min(end, routes[i][1]);
        }
    }
    return answr;
}

기억할 점

다른사람의 풀이

나는 시작점 정렬로 풀었는데, 끝점 정렬로 풀면 범위 start, end에서 start가 필요치 않다. camera의 마지막 부분과 routes[i][0]을 비교하고, 필요에 따라 routes[i][1]로 start를 갱신해주면 된다.  bool 변수도 없이 구현이 가능하다.

#include <bits/stdc++.h>

using namespace std;

bool cmp(vector<int> a, vector<int> b) { return a[1] < b[1]; }

int solution(vector<vector<int>> routes) {
    int answer = 0;
    int limit = -30001;
    sort(routes.begin(), routes.end(), cmp);
    for(int i = 0; i < routes.size(); i++){
        if(limit < routes[i][0]){
            answer++;
            limit = routes[i][1];
        }
    }
    return answer;
}

'■ 알고리즘 > ◻ Programmers' 카테고리의 다른 글

[C++]입국심사  (0) 2023.05.03
[C++]모음사전  (0) 2023.03.13
[C++] 아이템 줍기  (0) 2023.03.13
[C++]단어 변환  (0) 2023.03.13
[C++]이중우선순위큐  (0) 2023.03.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함