본문 바로가기
Language/Java

[Programmers | Java | 연습문제 풀이] 정수 제곱근 판별 - Solution with Math.sqrt()

by ㅇ달빛천사ㅇ 2024. 6. 14.
728x90

KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | Algorithm CODEKATA

정수 제곱근 판별

🏷 관련 주제 : 제곱근 long Math.pow()



문제 설명

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


제한 사항

  • n1이상, 50000000000000 이하인 양의 정수입니다.

입출력 예

n return
121 144
3 -1

입출력 예 설명

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

입출력 예#2
3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다.


✔ Solution with Math.sqrt()

class Solution {
    public long solution(long n) {
        long answer = 0;
        long sqrt = (long) Math.sqrt(n);
        if (sqrt * sqrt == n) {
            answer = (long) Math.pow(sqrt + 1, 2);
        } else {
            answer = -1;
        }

        return answer;
    }
}
채점 결과


💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍

📌 오늘 만난 문제 : 매개변수로 받은 양의 정수 n이 양의 정수 x의 제곱이라면 x + 1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.


1. 반환할 값을 담을 long 타입 변수 answer 초기화

long answer = 0;

2. 매개변수로 받은 양의 정수 n의 제곱근을 구한 후, long 타입으로 변환하여 long sqrt에 할당하자.

n의 제곱근을 long 타입으로 변환하면 소숫점 아래 자리는 버림을 한다.


long sqrt = (long) Math.sqrt(n);


  • 만약 n이 제곱수이면, sqrt를 다시 제곱을 하면 n이 나옴.

    (Math.sqrt(n)을 long 타입으로 변환할 때, 버림되는 값이 없으므로)

  • 만약 n이 제곱수가 아니면, sqrt를 다시 제곱을 하면 n보다 작은 값이 나옴.

    3. `sqrt`의 제곱과 n을 비교하여 n이 제곱수 이면 sqrt + 1의 제곱을 반환할 값으로 할당하고 그렇지 않으면 -1을 반환할 값으로 할당하자.

    if (sqrt * sqrt == n) {
        answer = (long) Math.pow(sqrt + 1, 2);
    } else {
        answer = -1;
    }
    

4. answer에 할당된 값을 반환하자.

return answer;

💬 무엇을 새롭게 알았는지

long 타입을 별로 사용해 보지 못했는데 long 타입 변수 사용 및 계산을 해 볼 수 있었고
Math.sqrt() 메서드를 사용해 보았다.


📚 References(참고 자료)

[Java] 자바 거듭 제곱 구하기 Math.pow()

728x90


Top