[프로그래머스] [C++] 단속 카메라 (set, greedy)
2021. 4. 6. 17:10ㆍ알고리즘/프로그래머스
1. 문제
코딩테스트 연습 - 단속카메라 | 프로그래머스 (programmers.co.kr)
2. greedy
이 문제는 set 문제로 생각할 수 있다.
겹치는 부분이 생기면 한 set에 있다고 생각하는 것이다.
단 이때 set을 형성하는 순서가 중요하다. (그리디 => 제일 가까운 것이랑 set형성)
lo 기준 hi기준 으로 적당히 순차적으로 set을 형성하면 된다.
set(lo, hi) = lo ~ hi 인 범위를 포함하고 있는 원소들의 집합
이렇게 함수를 표현하고 나면 이제 set의 size를 리턴하게 하면 문제는 해결된다.
이때 set 자료구조는
오버라이딩된 비교연산자를 통해 false 가 나오면
오퍼랜드의 자리를 바꾸어 false가 나오면 같은거로 취급한다.
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
|
#include <string>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
class ca{
public:
int *lo, *hi;
ca(int *_lo = nullptr, int *_hi = nullptr): lo{_lo}, hi{_hi} {}
bool operator < (const ca& c) const {
if((*c.lo <= *hi && *hi <= *c.hi) || (*c.lo <= *lo && *lo <= *c.hi)){
*lo = max(*c.lo, *lo);
*hi = min(*hi, *c.hi);
return false;
}
return *lo > *c.lo;
}
};
int solution(vector<vector<int>> routes) {
set<ca> mp;
sort(routes.begin(), routes.end());
for (int i = routes.size() -1 ; i >= 0; i--){
mp.insert(ca(&routes[i][0],&routes[i][1]));
}
return mp.size();
}
|
cs |
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 내적 (transform. accumulate) (0) | 2021.05.09 |
---|---|
[프로그래머스] [C++] 섬 연결하기 (prim) (0) | 2021.04.04 |
[프로그래머스] [C++] 여행경로 (dfs) (0) | 2021.04.03 |
[프로그래머스] [C++] 프린터 (queue) (0) | 2021.04.01 |
[프로그래머스] [C++] 베스트앨범 (map) (0) | 2021.03.31 |