LeetCode 75: 374. Guess Number Higher or Lower

김준수·2024년 4월 15일
0

LeetCode 75

목록 보기
53/63
post-custom-banner

leetcode link

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

Solution

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; // 이 부분은 실행되지 않습니다. 반복문 내에서 반드시 값을 반환합니다.
    }
}

post-custom-banner

0개의 댓글