0401 정수 제곱근 판별

xodus·2022년 4월 2일
0

codingTest

목록 보기
5/24

문제 설명

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

제한 사항

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

입출력 예

nreturn
121144
3-1
121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144룰 리턴합니다.
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.

기본코드

class Solution {
    public long solution(long n) {
        long answer = 0;
        return answer;
    }
}

정답코드

class Solution {
    public long solution(long n) {
        long answer = 0;
        long a = (long)Math.sqrt(n);
        
        if(Math.pow(a,2)==n)
            answer = (long)Math.pow(a+1,2);
        else
            answer = -1;
        
        return answer;
    }
}

문제풀이

솔직히.. 이번 문제는 문제를 이해하는데에는 오래 걸리지 않았지만 어떻게 구현해야할지 많이 고민했던것같다. 결국 구글링을 해서 Math.sqrt라는 메소드를 찾게되었다. 이 메소드의 뜻은 n의 제곱근을 알려주는 메소드인데, n이 9라면 값은 3을 내는 메소드이다. a에 제곱근을 넣어두고 Math.pow 라는 메소드를 사용했는데 이 메소드는 (a, 2) a를 2제곱 한다는 뜻의 메소드이다. a가 2라면 2의 2승을 해준다. Math.pow(a,2)==n과 같은지 비교한후에 맞으면 a+1을한것은 2제곱하고 아닐경우에 -1을 리턴하는 방법으로 작성하였다.

2개의 댓글

comment-user-thumbnail
2022년 4월 3일

구글링을 하는 모습이 멋집니다.
앞으로도 구글링 할 일이 많아질텐데 할때마다 레벨업한다고 생각하면 조금 더 재밌어질지도..?
벌써 두개의 함수를 알게 된걸 축하드립니다!

답글 달기
comment-user-thumbnail
2022년 4월 3일

기승전결이 있는 문제풀이라,, 자세하게 설명되어서 이해가 잘 되네요!

답글 달기