We are playing the Guess Game. The game is as follows:
I pick a number from 1
to n
. You have to guess which number I picked.
Every time you guess wrong, I will tell you whether the number I picked is higher or lower than your guess.
You call a pre-defined API int guess(int num)
, which returns three possible results:
-1
: Your guess is higher than the number I picked (i.e. num > pick
).1
: Your guess is lower than the number I picked (i.e. num < pick
).0
: your guess is equal to the number I picked (i.e. num == pick
).Return the number that I picked.
Example 1:
Input: n = 10, pick = 6
Output: 6
Example 2:
Input: n = 1, pick = 1
Output: 1
Example 3:
Input: n = 2, pick = 1
Output: 1
Constraints:
1 <= n <= 231 - 1
1 <= pick <= n
우리는 추측 게임을 하고 있습니다. 게임은 다음과 같습니다:
저는 1
부터 n
까지의 숫자 중 하나를 선택합니다. 당신은 제가 선택한 숫자를 맞춰야 합니다.
매번 틀릴 때마다, 제가 선택한 숫자가 당신의 추측보다 높은지 낮은지 알려드립니다.
사전에 정의된 API int guess(int num)
을 호출하면, 세 가지 가능한 결과가 반환됩니다:
-1
: 당신의 추측이 제가 선택한 숫자보다 높습니다 (즉, num > pick
).1
: 당신의 추측이 제가 선택한 숫자보다 낮습니다 (즉, num < pick
).0
: 당신의 추측이 제가 선택한 숫자와 같습니다 (즉, num == pick
).제가 선택한 숫자를 반환하세요.
예제 1:
입력: n = 10, pick = 6
출력: 6
예제 2:
입력: n = 1, pick = 1
출력: 1
예제 3:
입력: n = 2, pick = 1
출력: 1
제약 조건:
1 <= n <= 231 - 1
1 <= pick <= n
public class Solution extends GuessGame {
public int guessNumber(int n) {
int low = 1;
int high = n;
while (low <= high) {
int mid = low + (high - low) / 2; //(low+high)/2 대신 사용해 overflow 방지
int result = guess(mid);
if (result == 0) {
return mid; // 정답을 찾은 경우
} else if (result == -1) {
high = mid - 1; // 중간값보다 작은 경우
} else {
low = mid + 1; // 중간값보다 큰 경우
}
}
return -1; // 이 부분은 실행되지 않습니다. 반복문 내에서 반드시 값을 반환합니다.
}
}