임의의 양의 정수 n
에 대해, n
이 어떤 양의 정수 x의 제곱
인지 아닌지 판단하려 합니다.
n
이 양의 정수 x의 제곱
이라면 x+1의 제곱
을 리턴하고, n
이 양의 정수 x의 제곱
이 아니라면 -1
을 리턴하는 함수를 완성하세요.
n
은 1이상, 50000000000000 이하
인 양의 정수입니다.
n | return |
---|---|
121 | 144 |
3 | -1 |
입출력 예#1
121
은 양의 정수 11의 제곱
이므로, (11+1)
를 제곱한 144
를 리턴합니다.
입출력 예#2
3
은 양의 정수의 제곱이 아니므로, -1
을 리턴합니다.
class Solution {
public long solution(long n) {
long answer = 0;
for ( long x = 1L; x <= Math.sqrt(n); x++ ) { //n의 제곱근까지 반복
//x제곱이 n이면 (x+1)*(x+1)을 answer에 저장
answer = ( x*x == n ? (x+1)*(x+1) : -1);
}
return answer;
}
}
public long solution(long n) {
외부에서 양의 정수를 뜻하는 n
변수를 가져온다.
long answer = 0;
리턴할 값인 answer
을 long
타입으로 초기화를 한다.
for ( long x = 1L; x <= Math.sqrt(n); x++ ) { //n의 제곱근까지 반복
//x제곱이 n이면 (x+1)*(x+1)을 answer에 저장
answer = ( x*x == n ? (x+1)*(x+1) : -1);
}
양의 정수를 뜻하는 n
이 long
타입이기 때문에 비교하는 x
변수도 1L
로 초기화한다.
x
가 n
의 제곱근과 같거나 작을 동안 for문
을 반복한다.
Math.sqrt()
는 ()
안의 변수의 제곱근을 구할 수 있는 메서드
이다. 때문에 Math.sqrt(n)
은 n의 제곱근
을 의미한다.
x
의 값을 n의 제곱근
까지 설정한 이유는 x*x == n
이기 때문에 x
는 n의 제곱근
이므로 그렇게 설정하였다.
삼항 연산자
를 이용하여 answer
에 리턴할 값을 저장한다.
만약 x*x == n
조건이 참
이라면 (x+1)*(x+1)
값을 저장하고, 거짓
이라면 -1
을 저장한다.
return answer;
조건에 따른 값이 들어있는 answer
을 return
한다.