프로그래머스 연습문제 정수 제곱근 판별 풀이
문제 정리
- 양의 정수 n이 주어질때 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 한다.
- n이 어떤 정수 x의 제곱이라면 (x+1)^2을 리턴 아니라면 -1을 리턴한다.
문제 풀이
- 주어진 수 n을 루트 취해본다. 취한 값이 floor한 값과의 차이가 없다면 n은 Math.sqrt(n)의 제곱이 된다.
예를들어 121이라면 루트를 했을때 11입니다.
이 경우 floor한 값은 그대로 11 입니다. 뒤의 소수점이 없기 때문입니다. 이 경우 (Math.sqrt(a)+1)^2을 구합니다.
- 만약 어떤 수의 제곱이 아니라면 루트를 취했을때 뒤에 소수점이 남기 때문에 floor한 값과 차이는 0이 아니게 됩니다.
프로그래머스 정수 제곱근 판별
Math의 sqrt를 이용하면 제곱근을 구할 수 있습니다.
Math의 floor는 소수이하를 버린다고 보시면 됩니다.
public static long solution(long n) {
double a = Math.sqrt(n);
if(a - Math.floor(a) == 0){
long b = (long)(a+1);
return (long)Math.pow(b,2);
}
else
return -1;
}