| 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 32 33 34 35 | #include #include #include #include using namespace std; int parametric_search(vector<int> &rocks, int n, int dist) { int prev_distance = 0, count = 0; for(int i = 0; i < rocks.size(); i++) { if(rocks[i] - prev_distance >= dist) prev_distance = rocks[i]; else ++count; } return (count > n); } int solution(int distance, vector<int> rocks, int n) { int answer = 0; rocks.push_back(distance); sort(rocks.begin(), rocks.end()); int l = 0, r = distance; while(l <= r) { int mid = (l + r) / 2; if(parametric_search(rocks, n, mid)) r = mid - 1; else { l = mid + 1; } } return r; } |
<= 인지 < 인지도 헷갈리고 반환하는게 r인지 l인지도 헷갈림
많이풀다보면 판단이 되겠지
와 변수하나 만들어서 대입하는 식으로하면 인덱스변수 두개 만드는 헛짓거리 안해도 되네 쩐다.. 배워감..
이거 파라메트릭 부분이 이상한데
[1, 2, 3]이고 distance: 4, n: 2 일때 제대로 나옴?
아니네 잘 나온다
갓갤주 혹시나해서 반례도 찾아주시넹
반환이 r인지 l인지는 그때그때 그래프 그려서 시각적으로 판별하는데 ㄱㅊ은듯
종만북에 있는 binary search 소개하는 부분에서 불변식 사용해서 증명하는데 이거 이해하면 그런 실수 많이 줄어듬.