본문 바로가기

개발/프로그래머스

정수 제곱근 판별

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

 

코딩테스트 연습 - 정수 제곱근 판별

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

programmers.co.kr

package sqrt;

public class Sqrt {
	public static long solution(long n) {
		double answer = Math.sqrt((double)n);//제곱근반환
		if((answer-Math.floor(answer))!=0) {//만약 나온 제곱근을 버림한게 원래 제곱근과 같지 않다면
			return -1;
		}
		return (long)(Math.pow(answer+1, 2));//만약 나온 제곱근을 버림한게 원래 제곱근과 같다면
	}
	
	public static void main(String[] args) {
		System.out.println(solution(121));
		System.out.println(solution(3));
	}
}

이번 문제를 풀면서 찾아서 쓴 메서드는 Math.sqrt(), Math.floor(), Math.pow()입니다.

Math.sqrt(double a)는 a의 양의 제곱근(double)을 반환하는 메소드입니다. 만약에 a가 NaN이거나 0미만인 값이면 NaN을 반환한다고 합니다.
NaN은 Not a Number의 약자로 NaN인지 파악하는 방법은 Double.isNaN(x) 메소드를 사용하면 됩니다.

Math.floor(double a)은 소수점이하를 버림한 값(double)을 반환하는 메소드입니다.

Math.pow(double a, double b)는 a가 밑이고, b가 지수인 값(double)을 반환하는 메소드입니다.

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);// 1더하고 제곱한 값을 리턴.
        }
        return -1;
  }
}

이 코드가 메모리도 덜 먹고 속도도 많으면 7배 차이가 나서 더 좋은 코드라고 생각했습니다.

'개발 > 프로그래머스' 카테고리의 다른 글

정수 내림차순으로 배치하기  (0) 2021.09.11
제일 작은 수 제거하기  (0) 2021.08.19
최대공약수, 최소공배수(유클리드호제법)  (0) 2021.08.19
하샤드 수  (0) 2021.08.16
콜라츠 추측  (0) 2021.08.16