프로그래머스

[프로그래머스_Level1] 정수 제곱근 판별

빙수빈수 2021. 7. 13. 13:15

https://programmers.co.kr/learn/courses/30/lessons/12934

 

코딩테스트 연습 - 정수 제곱근 판별

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

programmers.co.kr

[문제]

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

 

[제한 조건]

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

 

[코드]

class Solution {
public long solution(long n) {
        // n의 값에 루트를 씌운 값을 구한다.
		Double sqrt=Math.sqrt(n);
        
		/*
		 * n이 양의 정수의 제곱근이면 
		 * n에 루트를 씌운 값이 양의 정수여야 한다.
		 * 따라서, sqrt 값과 sqrt 값을 정수형으로 바꾼 값이 같다면
		 * n은 양의 정수의 제곱근이 된다.
		 */
        if(sqrt==sqrt.intValue())
        	return (long)Math.pow(sqrt+1, 2);
        else return -1;
    }
}

 

[고찰]

 n이 어떤 양수의 제곱근인지 판별하기 위해서는 n에 루트를 씌운 값이 양의 정수여야 한다. 따라서 n의 루트 값과 n의 루트 값을 정수로 바꾼 값이 같은지만 판별하면 해결되는 문제이다. 다만 Double형의 정수를 양의 정수로 바꾸는 함수를 알고 있어야 한다. 앞의 아이디어는 떠올랐지만 해당 기능을 수행하는 함수를 알지 못해 검색해본 문제였다.

 

                                                       <자바 라이브러리>
  • Double형 변수명.intValue() : Double형의 정수를 양의 정수로 바꿔주는 함수