PS
[백준] 17266 어두운 굴다리 C++
Eastplanet
2024. 1. 24. 23:03
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int N, M;
vector<int> pos;
bool posibleAllBright(int height) {
int position = 0;
for (int curr : pos) {
int leftLight = curr - height;
int rigntLight = curr + height;
if (position < leftLight)
return false;
position = rigntLight;
}
if (position >= N)return true;
else return false;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N >> M;
for (int i = 0; i < M; i++) {
int tmp;
cin >> tmp;
pos.push_back(tmp);
}
int lo = 0;
int hi = N;
int mid = ((lo + hi) / 2);
while (lo != hi) {
if (hi - lo <= 1) {
if (posibleAllBright(hi)) {
lo = hi;
}
else {
hi = lo;
}
break;
}
if (posibleAllBright(mid)) {
hi = mid;
mid = ((lo + hi) / 2);
}
else {
lo = mid;
mid = ((lo + hi) / 2);
}
}
cout << lo;
}
가로등의 높이가 10만까지 가능하고
가로등의 개수또한 10만까지 가능하다.
가로등의 높이의 경우 N의 높이이면 항상 가능하다.
이후 0~N범위의 이분탐색을 통해 적절한 가로등의 높이를 찾을 수 있다.