문제
정수가 주어지면, 그 수의 정수 제곱근을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 n이 주어진다. (0 ≤ n < 263)
출력
첫째 줄에 q2 ≥ n인 가장 작은 음이 아닌 정수 q를 출력한다.
예제 입력 1 복사
122333444455555
예제 출력 1 복사
11060446
풀이
단위가 커서 long 자료형을 사용햇고
m이 value의 제곱근 이상인 경우는 m이 더 커지면 무조건 value의 제곱근 보다 크니 r을 줄이고
작으면 m보다 작은 값은 절대 value의 제곱근 보다 클 수 없으니 l을 m+1 하면서 이분탐색 했다
import java.awt.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
class Main
{
static long Solution(long value) {
long l = 1, r = value, ans = 0;
while (l <= r) {
long m = (l + r) / 2;
// lower bound
if (m >= Math.sqrt(value)) {
r = m - 1;
ans = m;
}
else l = m + 1;
}
return ans;
}
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
long l = in.nextLong();
System.out.println(Solution(l));
}
}
'자바 알고리즘 > 백준' 카테고리의 다른 글
백준 2110 공유기 설치(매개변수탐색) (1) | 2024.03.31 |
---|---|
백준 2805 나무자르기 (매개변수 탐색) (0) | 2024.03.27 |
백준 28470 (0) | 2024.03.24 |
백준 10816 (map) (1) | 2024.03.24 |
백준 2467(이분탐색) (0) | 2024.03.22 |