첨에 아무 생각 없이 mid*mid를 롱 타입으로 계산했는데 오버 플로우가 발생해서 BigInteger로 계산하도록 했다.
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long n = in.nextLong();
long end = n;
long start = 0;
long answer = n;
while (start <= end) {
long mid = (start + end) / 2;
BigInteger bigMid = BigInteger.valueOf(mid);
if (bigMid.multiply(bigMid).compareTo(BigInteger.valueOf(n)) >= 0) {
answer = Math.min(answer, mid);
end = mid - 1;
} else {
start = mid + 1;
}
}
System.out.println(answer);
}
}
- java에서 자료형
- Long - 64비트(-9223372036854775808 ~ 9223372036854775807)
- BigInteger - 무한한 값
'알고리즘 공부 > boj' 카테고리의 다른 글
boj 19637: IF문 좀 대신 써줘 (0) | 2021.03.17 |
---|---|
boj 2805: 나무 자르기 (0) | 2021.03.16 |
boj 1789: 수들의 합 (1) | 2021.03.15 |
boj 1339: 단어 수학 (0) | 2021.02.14 |
boj 2638: 치즈 (0) | 2021.02.14 |