[Code-Kata] 정수 제곱근 판별

고현규·2023년 11월 29일

문제 설명

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

제한 사항

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

nreturn
121144
3-1

입출력 예 설명

입출력 예#1

121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.

입출력 예#2

3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.


public class Solution {
    public long solution(long n) {
        long answer = 0;
        
        for (long i = 1; i <= n; i ++)
        {
            if (i * i == n)
            {
                answer = i+1;
                answer = (answer * answer);
                break;
            }
            else
                answer = -1;
        }
        
        return answer;
    }
}

처음에는 Math.Sqrt(n)을 사용하려 했다.
하지만, 제곱근이 Double로 나와 항상 소숫점 까지 계산되어 나타나는데
해당 값이 정수인지 아니면 소숫점이 있는 실수인지 확인하는 방법을 몰라 위처럼 작성했다.

if문에 보면 if(i * i == n)로 작성하기 이전에,
if(n / i == i)로 작성했었다. 이 때 1건에 대하여 오답이 발생했다.

오류가 나는이유는 정확히 모르겠다.
확실하지 않지만, 실수형 제곱근 * 실수형 제곱근 했을 때 정확히 원래값이 나오는게 아닐까?


정답 제출 이후 소수점의 유무를 확인하는 방법을 알았다.

if(n % 1 == 0)
  // 실수다
else
  // 실수가 아니다.

수를 1로 나누었을 때 나머지가 0이면 정수, 아니면 실수다.

profile
게임 개발과 기획

0개의 댓글