본문 바로가기

코딩 테스트

[프로그래머스] (Lv.1) 정수 제곱근 판별

728x90

문제


임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

 

 

-  출력 예시  -

정답 코드


<  내 정답 코드  1 >

class Solution {
    public static long solution(long num) {
        for (long i = 1; i <= Math.sqrt(num); i++) {
            if (i * i == num) {
                return (long) Math.pow((i + 1), 2);
            }
        }
        return -1;
    }
}

 

<  내 정답 코드  2 >

class Solution {
    public long solution(long n) {
        long i = (long) Math.sqrt(n);
        return i * i == n ? (long) Math.pow((i + 1), 2) : -1;
    }
}

이것을 주의하자!


-  첫 번째 방법보다 두 번째 방법이 더 효율적인 것 같다. 왜냐하면 굳이 for 문을 통해서 작은 숫자들까지 연산할 필요가 없기 때문이다. 단순하게 n 의 제곱근을 int 형으로 구해서 소숫점을 없애고, 구한 제곱근을 곱해서 해당 숫자가 되는지만 확인하면 된다.

 

 Math.pow(대상 숫자, 지수) 의 반환 타입은 'double' 이다. 따라서 원하는 값으로 형변환 해줘야 한다!

 

-  제곱을 하기 위해선 Math.pow(),  반대로 제곱근을 하기 위해선 Math.sqrt() 메서드를 사용한다.