알고리즘 : 프로그래머스 : JAVA : 정수 제곱근 판별

2022. 1. 19. 18:13알고리즘/프로그래머스

반응형

<문제>


<코드 & 설명>

class Solution {
    public long solution(long n) {
        long sqrt = (long) Math.sqrt(n);    // 1. 제곱근을 구해주는 함수다. 제곱근을 구해서
        if(n == Math.pow(sqrt,2)) {          // 2. 구한 제곱근을 제곱한뒤 n과 비교
        	return (long)(Math.pow(sqrt+1, 2));  //3. 
        }else {           //4
        	return -1;    
        }
    }
}

<설명>

임의의 양의 정수 n에 대해 n이 어떤 양의 정수 x의 제곱인지 판단하기 위해서, n의 제곱근을 제곱을 해준 뒤 n과 비교하면 된다.

1. Math.sqrt(n)를 통해 제곱근을 찾는다.
2. 1번에서 찾은 제곱근을 Math.pow()를 사용하여 제곱한뒤 비교한다.
3. n이 어떤 양의 정수 x의 제곱이라면, 1에서 찾은 제곱근에 1을 더한 후 제곱하여 리턴
4. 아닐 시 -1을 리턴.

<참고>
pow : 거듭제곱을 계산해주는 함수
   Math.pow(숫자, 거듭제곱 횟수);

sqrt : 제곱근을 구해주는 함수
   Math.sqrt(숫자);

어떤 수 a를 제곱해서 b가 될 때, a를 b의 제곱근이라고 한다.
ex) 2나 -2를 제곱하면 4가 된다. 4의 제곱근은 2나 -2이다.
    49의 제곱근 = 7, -7
제곱근을 다른말로 근호, 또는 루트라고 한다. 대부분 루트라고 한다.


<다른 방법>

class Solution {
    public long solution(long n) {
        double root = Math.sqrt(n);  // n의 제곱근 구하기
        
        // answer는 n의 제곱근을 1로 나눈 나머지가 0이면 거기에1을 더해 제곱한 값 아니면 -1
		long answer = (root%1==0)?(long)Math.pow(root+1, 2):-1;
        return answer;
    }
}

제곱근을 1로 나눈 나머지가 0이 아닌거는 3의 제곱근은 루트3이니 1로 나눴을 때 나머지가 0이 아니겠지. 그걸로 판별.

반응형