[javascript] Math.sqrt(), Math.pow(), 지수연산자(**)

·2025년 1월 11일

Math.sqrt()

  • 자바스크립트에서 숫자의 제곱근을 계산할때 사용가능한 내장함수

기본 문법

Math.sqrt(x); 

위와 같은 상태에서

  • x의 제곱근 (ex. x = 121 경우 11 반환)
  • 만약 숫자가 음수이면 NaN 반환

예제

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을 리턴하는 함수를 완성하세요.

solution

function solution(n) {
    const x = Math.sqrt(n)
    return x % 1 == 0 ? (x + 1) * (x + 1) : -1;
}

Math.sqrt()를 사용하던 중 해당 함수의 반대를 구하는 법은 없을까 찾아보았다.
완전한 제곱을 위한 내장함수는 없지만
ES6부터 추가된 지수연산자가 있었다.

지수연산자 (= 거듭제곱)

  • 왼쪽 피연사자를 밑, 오른쪽 피연산자를 지수로 한 값을 구함
  • BigInt도 피연산자로 받을 수 있다는 점을 제외 하면 Math.pow()와 동일

예제

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;
}

해당 방식으로 더 깔끔하게 풀 수 있다.

세상엔 아직 내가 모르는 함수가 너무 많은듯..!

profile
하고싶은거 짱많은 주니어 프론트엔드 개발자

0개의 댓글