?백준 2805 나무 자르기 풀었습니다.

adj는 나무 길이 입력 받은 겁니다.


for (int i = 0; i < n; i++)

{

long length = Integer.parseInt(st.nextToken());

adj.add(length);

hi = Math.max(hi, length) + 1;

}


while (lo + 1 < hi)

{

mid = (lo + hi) / 2;

long get = 0;


for (int i = 0; i < n; i++)

{

if (adj.get(i) > mid)

get += adj.get(i) - mid;

}


if (get >= m)

lo = mid;

else if (get < m)

hi = mid;

}


이분 탐색 부분을 이렇게 짠다고 할 때,

lo=0, hi= max + 1 범위로 해야 되는 거 아닌가요?

hi에 +1 안해주면 lo가 최대 길이로 정답일 때, lo+1<hi 조건 때문에 반환 못하기 때문에 +1 해줘야 한다고 생각했는데,

hi=max로 코드 제출해도 정답이네요.

어떤 부분을 잘못 생각했을까요?