알고리즘/C#

[C#] 정수 제곱근 판별 - 프로그래머스

야아옹 2020. 10. 18. 14:44

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

 

제한사항 : 

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

풀이 : bool 값으로 리턴이 되는 Tryparse 를 사용하려다가 string 으로 캐스팅하게되고... 이를 Long 타입으로

변환 하니 시간이 느릴 수밖에... 캐스팅을 적게 해야하는것을 생각하며 코딩 해봐야겠다..

public static long solution(long n)
{
    long answer = 0;
    int result;

    if (int.TryParse(Math.Sqrt(n).ToString(), out result))
    {
        answer = (long)Math.Pow((result + 1), 2);
    }
    else
    {
        answer = -1;
    }
       

    return answer;
}

 

풀이2 : 다른 사람 풀이인데 중간에 제곱근함수에 나온 값을 정수 판별하는법을 배우게 된거같다!

using System;

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

        var sqrt = Math.Sqrt(n);

        if (sqrt % 1.0 != 0)
            return -1;

        answer = (long)sqrt;

        answer += 1;
        answer *= answer;

        return answer;
    }
}