[CodingTest] 정수 제곱근 판별

hye·2023년 2월 17일
0

AlgorithmTest

목록 보기
14/95

📖 Exam

문제 설명

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


✍ Answer

class Solution {
    public long solution(long n) {
        long answer = -1;
        for (long x = 1; x <= Math.sqrt(n); x++) {
            if (n == x * x) {
                answer = (x + 1) * (x + 1);
            }
        }
        return answer;
    }
}

💡 Realization

  • 시간 초과 너무 많이 떠서 결국 제곱근 구하는 메서드를 찾아서 해결했는데
    아래와 같이 if 문 작성하니까 시간도 짧고 해결되더라...
    내 if문 안의 조건이 계산 되는게 오래걸렸나봄 ㅠㅠ

  • 가 아니라 return 되면 끝내거나 아니면 break를 걸어서
    중단 시켜야하는데 끝까지 돌게 만드니... 시간 초과되는 문제가 생긴 것이었다.
    또한 중간에 n = 이 1일 경우나 4일 경우 등의 경우를 생각하지 않아서 생기는 문제도 있었는데
    그런 변수까지 생각하여 아래와 같이 새로 작성해보니 깔끔하게 통과함.

class Solution {
    public long solution(long n) {
        if(n==1){
            return 4;
        }
        for (long x = 1; x <= n/2; x++) {
            if (n == x * x) {
                return (x + 1) * (x + 1);
            }
        }
        return -1;
    }
}

참고사이트: https://school.programmers.co.kr/learn/courses/30/lessons/12934/solution_groups?language=java

java.lang.Math 클래스

수학에서 자주 사용하는 상수들과 함수들을 미리 구현해 놓은 클래스
Math 클래스의 모든 메소드는 클래스 메소드(static method)이므로, 객체를 생성하지 않고도 바로 사용할 수 있다.
이러한 Math 클래스는 java.lang 패키지에 포함되어 제공된다.

Math.sqrt()

Math.sqrt(double a) ==> a의 제곱근

Math.pow()

Math.pow(double a, double n) ==> a를 n번 곱한 값을 리턴한다. =aⁿ

출처: https://doompok.tistory.com/7

profile
Junior Backend Developer

0개의 댓글