본문 바로가기

❓ 문제

Given a non-negative integer x, compute and return the square root of x.

음이 아닌 정수 x가 주어지면 x의 제곱근을 계산하고 반환합니다.

 

Since the return type is an integer, the decimal digits are truncated, and only the integer part of the result is returned.

리턴 타입이 정수이기 때문에 소수점 이하 자릿수는 잘리고 결과의 정수 부분만 리턴됩니다.

 

Note: You are not allowed to use any built-in exponent function or operator, such as pow(x, 0.5) or x ** 0.5.

참고: pow(x, 0.5) 또는 x ** 0.5와 같은 내장 지수 함수 또는 연산자를 사용할 수 없습니다.

Example 1:

Input: x = 4
Output: 2

Example 2:

Input: x = 8
Output: 2

Explanation: The square root of 8 is 2.82842..., and since the decimal part is truncated, 2 is returned.

설명: 8의 제곱근은 2.82842...이고 소수점 이하 자릿수가 잘려서 2가 반환됩니다.

❗ 내 답변

/**
 * @param {number} x
 * @return {number}
 */
var mySqrt = function(x) {
    let div = 0;
    while ((div + 1) * (div + 1) <= x) {
        div++
    }
    return div;
};

제곱근 구하는 게 기억이 안 나 당황했던 문제였다. ㅋㅋㅋ
0부터 증가하는 임의의 수를 제곱 시켜서 x와 비교한다.
제곱 한 값이 x 보다 작다면 반복.
크다면 임의의 수를 반환한다.
그런데 x가 8 같은 경우 임의의 수를 증가 시키고 나서 while을 통과하면
2가 아닌 3이 반환되기 때문에
조건문에서 증가 시킨 수를 미리 제곱시켜 비교하고 임의의 수는 직접적으로 더해주지 않았다.

❗ Runtime이 가장 빨랐던 답변과 비교

/**
 * @param {number} x
 * @return {number}
 */
var mySqrt = function(x) {
    // let result = 1;
    // while(result * result <= x){
    //       result++
    // }
    // return --result
    return Math.floor(Math.sqrt(x))
};

내장 지수 함수 사용하지 말라고 되어 있던데, pow 만 아니면 괜찮은건가..?
Math.sqrt 는 제곱근을 반환하는 자바스크립트 메소드이다.
소수점이 붙는 경우를 대비해 Math.floor 로 감싸줬다.

주석 부분은 나랑 똑같았다.
다소 다른 점은, 나는 조건문에서 1을 더해줘서 본래 값이 직접적으로 1이 더해져 있지 않은 상태로 진행했고,
이 답변에선 더해준 상태에서 반환할 때 1을 빼줬다.

❗ Memory 사용이 가장 적었던 답변과 비교

/**
 * @param {number} x
 * @return {number}
 */
var mySqrt = function(x) {
    let check = Math.sqrt(x)
    check = Math.floor(check)
    return check
};

위 답변과 동일했다.

💡 개선 방안

Math.sqrt를 기억하고 활용하자!

Seize the day!

Spring MVC | Spring Boot | Spring Security | Mysql | Oracle | PostgreSQL | Vue.js | Nuxt.js | React.js | TypeScript | JSP | Frontend | Backend | Full Stack | 자기계발 | 미라클 모닝 | 일상