이분탐색을 구현하는 가장 심플한 문제로 보인다.
항상 start, end, mid를 기억하자.
다만 mid값을 구할 때는
start + (end - start) / 2
를 사용하자
(start + end) / 2
를 하면 오버플로우 가능성이 있다.
참고로 마지막 return문은 이론상 닿지 않아야 맞다. 아무거나 리턴해도 되지만 명시적으로 잘못되었다는 값을 주면 더 좋겠다.
public class Solution extends GuessGame {
public int guessNumber(int n) {
int start = 1;
int end = n;
while (start <= end) {
int mid = start + (end - start) / 2;
int compareResult = guess(mid);
if (compareResult == 0) {
return mid;
} else if (compareResult == 1) {
start = mid + 1;
} else {
end = mid - 1;
}
}
return -1;
}
}