본문 바로가기
코딩테스트 준비/백준

[백준] 2417번 - 정수 제곱근 [Java]

by mwzz6 2025. 2. 13.

https://www.acmicpc.net/problem/2417

 

[백준] 2417번 - 정수 제곱근 [Java]


1.  아이디어

 

제곱값이 N보다 크거나 같은 가장 작은 정수를 찾는 문제로 Lower Bound 이분 탐색으로 해결했다.


2. 문제풀이

 

가능한 q의 범위를 0부터 Math.sqrt(N) + 1로 설정해서 제곱이 N 이상인 수를 찾는 이분 탐색을 적용했다. 부동 소수점 이슈로 바로 적용하는 방식은 동작이 안되는 테스트 케이스가 많아서 q의 상한을 미리 정하고 돌렸다.


3. 코드

 

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        long N = Long.parseLong(br.readLine());

        long q = binarySearchLowerBound(N);
        System.out.println(q);
    }

    private static long binarySearchLowerBound(long N) {
        long low = 0;
        long high = (long) Math.sqrt(N) + 1;

        while (low < high) {
            long mid = low + (high - low) / 2;

            if (mid * mid < N) low = mid + 1;
            else high = mid;
        }

        return high;
    }

}

4. 후기