정수 제곱근 판별_Java

컴투루·2022년 6월 21일
0

프로그래머스 Lv.1

목록 보기
10/38

연습문제

🔥 정수 제곱근 판별 🔥


👀 문제

임의의 양의 정수 n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고 n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하자


✔️ 조건

n은 1이상, 50000000000000 이하인 양의 정수


👩‍💻 입력 & 🧙 출력

nreturn
121144
3-1

🙋‍♀️ 풀이

첫번째 풀이

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

위와 같은 풀이로 제출을 하니 테스트 3,6,13에서 실패했다...

두번째 풀이

class Solution {
    public long solution(long n) {
        long answer = 0;
        
        double x = Math.sqrt(n); //제곱근
        
        if(n == (long) Math.pow(x,2) && n%Math.sqrt(n) ==0){
            answer = (long) Math.pow(x+1,2);
        }else{
            answer = -1;  
        }
        return answer;
    }
}

그래서 두번째에서는 'n을 n의 제곱근으로 나누었을때 0 과 같다면'이라는 조건을 추가해주었다.
전혀 예상하지 못한 부분이어서 한참을 헤매고 있었다.

이번에는 Math클래스의 아래의 두 메서드를 사용했다.
⭐️ Math.sqrt() - 제곱근을 구하는 메서드
⭐️ Math.pow("어떤수","몇제곱") - 거듭제곱을 구하는 메서드


💬 다른 풀이

class Solution {
  public long solution(long n) {
      if (Math.pow((int)Math.sqrt(n), 2) == n) {
            return (long) Math.pow(Math.sqrt(n) + 1, 2);
        }

        return -1;
  }
}

비슷한 방식으로 구현했지만 불필요한 변수선언을 하지 않으면서 코드의 양을 줄였다.


👏 마무리

아자...

profile
맘 먹으면 못할 게 없지

0개의 댓글