1. ans를 밖에 빼놓고 구간은 [lo, hi]로 잡고 mid를 절대 구간에 포함시키지 않는 방법


int lo = 0, hi = n;

int ans;


while (lo <= hi) {

int mid = (lo + hi) / 2;

if (check(mid)) {

ans = mid;

lo = mid + 1;

}

else hi = mid - 1;

}


2. lo < mid < hi 를 유지시키고, mid를 구간에 포함시켜서 lo or hi가 ans를 갖게하는 방법


int lo = 0, hi = n;


while (lo + 1 < hi) {

int mid = (lo + hi) / 2;

if (check(mid)) lo = mid;

else hi = mid;

}




1번도 직관적이고 2번도 꽤 와닿긴 하네...