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 |