int mid = (hi + low) / 2;

        while(hi - low > 1){

            if(fn(arr, n, mid)){

                low = mid;

            }

            else{

                hi = mid;

            }

            mid = (hi + low) / 2;

        }

        return (fn(arr, n, hi) ? hi : low);

    }

이걸로 이해는 했는데..