ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 9-9: 2차식 정답 추측
    Binary Search 2018. 10. 25. 21:44

    2차식 정답 추측 (guess.cpp)

     

    문제


    2차식 f(x) = x*x+ x 가 있고, 숫자 a가 주어진다. 우리는 f(x) = a 를 만족하는 x의 값을 찾고 싶지만, 보통 이 값은 정수로 떨어지지 않는 경우가 많다. 예를 들어, f(x) = 20 을 풀고자 한다면, x = 4이기 때문에 이는 정수이지만, f(x) = 103 을 풀고자 한다면 이는 x = 9.6612... 로써 정수가 아니다.

    이 문제에서는 x의 정수부분이 얼마인지를 구하는 프로그램을 작성하시오. 예를 들어, f(x) = 103 을 풀고자 한다면, x = 9.6612... 이기 때문에 정수부분은 9가 된다.

     

    입력


    첫 번째 줄에 숫자 a가 주어진다. ( 1 ≤ a ≤ 100,000,000,000,000,000 )  

    출력


    f(x) = a 를 만족하는 x의 정수부분을 출력한다.  

    예제 입력

    103

    예제 출력

    9


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    public class guess {

    /**
    *
    * 문제:
    *
    * 2차식 f(x) = x*x+ x 가 있고, 숫자 a가 주어진다.
    * 우리는 f(x) = a 를 만족하는 x의 값을 찾고 싶지만, 보통 이 값은 정수로 떨어지지 않는 경우가 많다.
    * 예를 들어, f(x) = 20 을 풀고자 한다면, x = 4이기 때문에 이는 정수이지만, f(x) = 103 을 풀고자 한다면 이는 x = 9.6612... 로써 정수가 아니다.
    *
    * 이 문제에서는 x의 정수부분이 얼마인지를 구하는 프로그램을 작성하시오. 예를 들어, f(x) = 103 을 풀고자 한다면, x = 9.6612... 이기 때문에 정수부분은 9가 된다
    *
    *
    * 입력:
    * 첫 번째 줄에 숫자 a가 주어진다. ( 1 ≤ a ≤ 100,000,000,000,000,000 )
    *
    *
    * 출력:
    * f(x) = a 를 만족하는 x의 정수부분을 출력한다.
    *
    *
    * 예제 입력:
    * 103
    *
    *
    * 예제 출력:
    * 9
    *
    * @param args
    */

    public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    long N = Long.parseLong(br.readLine());
    binarySearch(N);

    }

    private static void binarySearch(long n) {
    long minX = 0L;
    long start = 1L;
    long end = (long) Math.sqrt(Long.MAX_VALUE);
    while (start <= end){
    // System.out.println("start : " + start+ ", end: " + end);
    long mid = (start+end) / 2;

    long result = mathFunc(mid);

    if (result > n){
    //search lower half
    end = mid-1;
    } else if (result < n){
    //if result is close to n
    //want to save biggest value whose result is less than n.
    if (minX<mid){
    minX = mid;
    }
    //search upper half
    start = mid+1;
    } else{
    minX = mid;
    break;
    }
    }
    System.out.println(minX);
    }

    private static long mathFunc(long minX) {
    return minX * (minX+1);
    }

    }


    'Binary Search' 카테고리의 다른 글

    9-8: 숫자 개수 세기  (0) 2018.10.25
    9-7: 구간의 합집합  (0) 2018.10.25
    9-5: 구슬상자  (0) 2018.10.25
    9-4: NN단표  (0) 2018.10.25
    9-2: 올라가는 달팽이  (0) 2018.10.25
Designed by Tistory.