티스토리 뷰

알고리즘 문제 풀이

2차식의 합

딩신 2018. 10. 4. 13:33

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


코드

///2차식의 합

import java.util.*;

public class Main {

public static ArrayList<Integer> box = new ArrayList<>();
public static long finalResult = 0;

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//총 몇개의 숫자를 입력 받을 것인지
long a;
int b;
long c[];
int d[];
int count = 0;
long max = Integer.MIN_VALUE;
a = sc.nextLong();

countN(1L, 3037000499L, a);

System.out.print(finalResult);

sc.close();

}

public static long isFx(long find) {

long k = (find * find) + find;

return k;
}


public static void countN(long s, long e, long b) {
if (s > e) return;
else {
long mid = (s + e) / 2;
Long result = isFx(mid);

if (result == b) finalResult = mid;
else if (result > b) countN(s, mid - 1, b);
else {
if (finalResult < mid) finalResult = mid;
countN(mid + 1, e, b);
}
}

}

}


'알고리즘 문제 풀이 ' 카테고리의 다른 글

구슬게임  (0) 2018.10.05
직사각형의 합  (0) 2018.10.05
구간의 합집합  (0) 2018.10.05
숫자 만들기  (0) 2018.10.05
숫자개수 세기  (0) 2018.10.04
두용액  (0) 2018.10.03
구슬 상자  (0) 2018.10.03
NN단표  (0) 2018.10.03
댓글