Math.sqrt(x);
위와 같은 상태에서
Math.sqrt(9); // 3
Math.sqrt(2); // 1.414213562373095
Math.sqrt(1); // 1
Math.sqrt(0); // 0
Math.sqrt(-1); // NaN
출처 : Mdn
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
function solution(n) {
const x = Math.sqrt(n)
return x % 1 == 0 ? (x + 1) * (x + 1) : -1;
}
Math.sqrt()를 사용하던 중 해당 함수의 반대를 구하는 법은 없을까 찾아보았다.
완전한 제곱을 위한 내장함수는 없지만
ES6부터 추가된 지수연산자가 있었다.
console.log(3 ** 4);
// Expected output: 81
console.log(10 ** -2);
// Expected output: 0.01
console.log(2 ** (3 ** 2));
// Expected output: 512
console.log((2 ** 3) ** 2);
// Expected output: 64
따라서 위에 코테 문제를 Math.sqrt() + ** 를 추가하여 다시 풀어보면
function solution(n) {
const x = Math.sqrt(n)
return x % 1 == 0 ? (x + 1) ** 2 : -1;
}
해당 방식으로 더 깔끔하게 풀 수 있다.
세상엔 아직 내가 모르는 함수가 너무 많은듯..!