반응형
sweeping 문제였습니다.
풀이방법
1. 웅덩이들의 좌표를 오름차순으로 정렬해줍니다.
2. 물웅덩이의 좌표들을 모두 확인하면서 다음을 수행합니다.
2-1. x좌표부터 시작해 만약 x를 넘어가는 물웅덩이의 끝 좌표가 있고 시작점이 x보다 크다면 x를 해당 웅덩이의 시작점으로 갱신해줍니다.
2-2. 이 후 널판지에 개수를 구합니다.
2-3. 정답에 더해준 뒤 x의 마지막 좌표를 마지막 널판지를 놓은 자리의 끝으로 갱신해줍니다.
3. 정답을 출력합니다.
Code
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int,int>;
int n, l, ans, x;
vector <pii> waterHole;
int main(){
cin >> n >> l;
while(n--){
int x,y;
cin >> x >> y;
waterHole.push_back({x,y});
}
sort(waterHole.begin(),waterHole.end());
for(auto &w : waterHole){
if (x >= w.second) continue;
x = max(x, w.first);
int cnt = (w.second - (x + 1)) / l + 1;
ans += cnt;
x += l * cnt;
}
cout << ans << '\n';
}
'Algorithm > Sweeping' 카테고리의 다른 글
(C++) - 백준(BOJ) 2018번 : 수들의 합 5 (0) | 2021.08.19 |
---|---|
(C++) - 백준(BOJ) 1689번 : 겹치는 선분 (0) | 2021.08.11 |
(C++) - 백준(BOJ) 2467번 : 용액 (0) | 2021.07.19 |
(C++) - 백준(BOJ) 2170번 : 선 긋기 (0) | 2021.05.02 |
(C++) - 백준(BOJ) 1644번 : 소수의 연속합 (0) | 2017.03.30 |