연습문제
🔥 정수 제곱근 판별 🔥
임의의 양의 정수 n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고 n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하자
n은 1이상, 50000000000000 이하인 양의 정수
n | return |
---|---|
121 | 144 |
3 | -1 |
첫번째 풀이
class Solution {
public long solution(long n) {
long answer = 0;
double x = Math.sqrt(n);
if(n != (long) Math.pow(x,2) ){
answer = -1;
}else{
answer = (long) Math.pow(x+1,2);
}
return answer;
}
}
위와 같은 풀이로 제출을 하니 테스트 3,6,13에서 실패했다...
두번째 풀이
class Solution {
public long solution(long n) {
long answer = 0;
double x = Math.sqrt(n); //제곱근
if(n == (long) Math.pow(x,2) && n%Math.sqrt(n) ==0){
answer = (long) Math.pow(x+1,2);
}else{
answer = -1;
}
return answer;
}
}
그래서 두번째에서는 'n을 n의 제곱근으로 나누었을때 0 과 같다면'이라는 조건을 추가해주었다.
전혀 예상하지 못한 부분이어서 한참을 헤매고 있었다.
이번에는 Math클래스의 아래의 두 메서드를 사용했다.
⭐️ Math.sqrt() - 제곱근을 구하는 메서드
⭐️ Math.pow("어떤수","몇제곱") - 거듭제곱을 구하는 메서드
class Solution {
public long solution(long n) {
if (Math.pow((int)Math.sqrt(n), 2) == n) {
return (long) Math.pow(Math.sqrt(n) + 1, 2);
}
return -1;
}
}
비슷한 방식으로 구현했지만 불필요한 변수선언을 하지 않으면서 코드의 양을 줄였다.
아자...