문제설명 :
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
제한사항 :
n은 1이상, 50000000000000 이하인 양의 정수입니다.
Math 클래스의 sqrt 메소드와 pow 메소드에 대해 배운 문제였습니다. 리턴 변수 형식이 double 이므로 형변환에 주의해서 풀었습니다.
class Solution {
public long solution(long n) {
double answer = 0;
// answer에 Math 클래스의 메소드를 사용할것이기 때문에,
// 초기값 long 타입 대신 double로 선언한다.
double x = Math.sqrt(n);
// sqrt 메소드를 사용해 n의 제곱근인 x를 선언한다.
if(x == (long)x){
// x와 long 타입으로 캐스팅한 x가 값을때,
// sqrt 메소드 사용후 소수점 자리가 없이 딱 나누어 떨어진것이기 때문에
// 해당 조건을 제곱근 일때의 조건으로 설정하였다.
answer = Math.pow(x+1, 2);
// 문제 조건을 pow 메소드를 사용해 return한다.
}else{
answer = -1;
// 그외에 경우엔 -1을 return 한다.
}
return (long)answer;
// double 타입으로 선언했기 때문에, long 타입으로 캐스팅한다.
// 제곱근인 경우 버려지는 소수점이 없기때문에 문제 발생하지 않는다.
}
}