알고리즘 연습/Lv.1

[ 프로그래머스 ] 정수 제곱근 판별 JAVA

코딩하는 너구리 2020. 5. 4. 01:19
반응형

정수 제곱근 판별

 

문제 설명

 

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

 

 

제한 사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

 

입출력 예

n return
121 144
3 -1

 

입출력 예 설명

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

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

 

 

문제 접근 방식

Math에서 제공하는 제곱근 관련 함수를 사용하려고 했습니다.

 

 Math.Sqrt( )

- java.lang.Math클래스의 메소드
- 인수를 전달하면 인수에 대한 제곱근 값을 리턴
- Math 클래스가 제공하는 메소드는 모두 정적이므로 Import나 Math클래스 선언 없이 바로 사용 가능

 

 

 

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

 

 

 

문제 풀이

Math.sqrt() 함수를 사용해서 풀이했습니다.

n의 제곱근이 자연수인지 판별하기 위해 Math.sqrt(n) % 1 == 0 연산을 해서 자연수가 아닌 경우에는 -1을 return 했습니다.

최종 결과로 (n+1) 제곱을 return 해주기 위해 (long)((Math.sqrt(n)+1) * (Math.sqrt(n)+1)) 연산을 사용했습니다.

 

 

 

고수의 풀이

저는 Math의 sqrt() 메소드만 사용했지만, Math에서 제공하는 pow() 연산을 사용하면 더 간결해질 수 있는 것 같습니다.

 

 

Math.pow( )

- java.lang.Math 클래스의 pow( ) 메소드​
- pow는 power의 거듭제곱을 의미
- 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;
  }
}

 

 

 

 

 

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

반응형