[JAVA/프로그래머스] 연습문제: 정수 제곱근 판별

👀 문제

https://programmers.co.kr/learn/courses/30/lessons/12934

👊 도전

1. 설계

  1. 루트n이 소수점을 가진다면 -1을 리턴, 아니라면 x+1의 제곱을 리턴한다.

2. 구현 (성공 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 *
 * @author HEESOO
 *
 */
 class Solution {
   public long solution(long n) {
       long answer = 0;
       double rootN=Math.sqrt(n);
       if(rootN==Math.floor(rootN))
           answer=(long)((rootN+1)*(rootN+1));
       else
           answer=-1;

     return answer;
   }
 }
 

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 루트n이 소수점을 가지는지 확인한다.
    • Math.sqrt()함수로 루트값을 구한다.
    • 루트값이 소수점을 가진다면 어떤 양수 x의 제곱이 될 수 없다.
    • 따라서 rootN이 소수값을 버린 것(Math.floor()이용)과 같은지 체크한다.
    • 같다면 x+1의 제곱을 리턴, 아니라면 -1을 리턴한다.

👏 해결 완료!

처음에는 루트n을 instanceof를 이용해 double인지 int인지 확인하여 문제를 풀려고 했는데, instanceof는 객체나 클래스에 사용 가능하다고 해서 다른 방법을 생각해 보았다. 나는 루트값이 소수점을 가지는지에 따라 코드를 짰는데, 다른 사람들은 루트n의 제곱이 n과 같은지로 확인했다.