[Programmers][Level1] 정수 제곱근 판별

울부짖는 늑대·2023년 7월 4일

문제 설명

임의의 양의 정수 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을 리턴합니다.

나의 코드

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

        while (n >= x * x) {
            if (n == x * x) {
                answer = (x+1) * (x+1);    
                break;
            }
            x++;
        }
        
        return answer = answer == 0 ? -1 : answer;
    }
}

풀이 방법

  • x의 제곱이 입력한 n의 수와 같거나 그 이상이라면 루프를 탈출하도록 조건을 만들었다.
  • n의 수와 x의 제곱이 동일하면 그것은 제곱근으로 판별된다.
  • 만약 루프를 탈출할 때(x의 제곱이 n 이상일 때) answer의 값이 0이면 제곱근이 아니므로 -1을 리턴한다
  • *break로 루프의 탈출문을 만들지 않아도 되지만, 한번 더 조건 검사를 하기에 런타임 시간의 차이가 조금 있었다.

다른 풀이

class Solution {
  public long solution(long n) {
    double i = Math.sqrt(n);

    return Math.floor(i) == i ? (long) Math.pow(i + 1, 2) : -1;
  }
}

풀이 방법

  • Math.Sprt()이라는 java.lang.Math 클래스의 함수이다.
  • 이 함수는 double 타입의 인수를 전달하면 인수에 대한 double 타입의 제곱근 값을 리턴해준다.
profile
이상을 현실로 구현하는 개발자

0개의 댓글