https://www.acmicpc.net/problem/2417
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. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 1018번 - 체스판 다시 칠하기 [Java] (0) | 2025.02.13 |
---|---|
[백준] 2810번 - 컵홀더 [Java] (0) | 2025.02.13 |
[백준] 14696번 - 딱지놀이 [Java] (0) | 2025.02.12 |
[백준] 7568번 - 덩치 [Java] (0) | 2025.02.12 |
[백준] 3985번 - 롤 케이크 [Java] (0) | 2025.02.12 |