문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.


n이 양의 정수 x의 제곱이라면

x+1의 제곱을 리턴하고,

 

n이 양의 정수 x의 제곱이 아니라면

-1을 리턴하는 함수를 완성하세요.

 

 

제한 사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

 

입출력 예

입출력 예 설명

입출력 예#1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

 

 

 


1번

if(n == 1) return 4

for(long i=2 ; i<n ; i++) {
	if(n/i == i && n%i == 0) return (i+1) * (i+1)
}

return -1

 

 

2번 ★

public class 정수제곱근판별 {

	public static void main(String[] args) {
    
		System.out.println(solution(121));
	}
	
	  public static long solution(long n) {
		  long num = (long)Math.sqrt(n); //121의 제곱근
		  return (num*num)==n?(num+1)*(num+1):-1;
	  
	  }

}

 

 

 

<1번과 2번의 차이>

2번의 실행속도는 0.7~0.8 ms 에서 끝나는 반면

1번의 경우 35.94ms ~ 72.00ms 의 속도가 나옵니다.

즉, 성능의 차이가 최대 10배 까지 일어날 수 있습니다.

 

 

 

 

 

(참고) Math.sqrt()

 

(참고) Math.pow()