[Daily Coding]_computeSquareRoot

fejigu·2022년 8월 12일
1

알고리즘 & 자료구조

목록 보기
17/24


문제

수를 입력받아 제곱근 값을 소수점 두 자리까지 리턴해야 합니다.

입력

인자 1 : num
number 타입의 정수 (num >= 2)

출력

number 타입을 리턴해야 합니다.
최대 소수점 둘째 짜리까지 구합니다. (소수점 셋째 자리에서 반올림)

주의 사항

Math.sqrt 사용은 금지됩니다.

입출력 예시

let output = computeSquareRoot(9);
console.log(output); // --> 3
output = computeSquareRoot(6);
console.log(output); // --> 2.45

힌트

소수점 처리는 javascript 표준 내장 객체인 Number를 검색해 봅니다. (js decimal places limit 또는 자바스크립트 소수점 자리수)
항상 타입을 주의하여야 합니다.
각 자리수(1, 0.1, 0.01, 0.001)마다 (목표값을 넘지 않는) 근사값을 구하는 방식이 있습니다.
제곱근을 구하는 방법 중 바빌로니아 법이 있습니다. 바빌로니아 법의 점화식(recurrence formula)을 이해할 수 있다면, 해당 식을 이용해 문제를 풀어도 좋습니다.


💻 코드 작성

수도 코드 조차 작성하지 못해 바빌로니아 법이 무엇인지 먼저 찾아보았다..

바빌로니아 법(The Babylonian Method)
임의의 수의 제곱근에 빠르게 수렴하는 수열을 만들어 근삿값을 구하는 방법이다.
양의 실수 a에 대하여 다음 과정을 따라 √a의 근삿값을 구할 수 있다

[내가 작성한 코드]

function computeSquareRoot(num) {
  
  const diffs =
  let base =
  
  for (let i = 0; i < diffs.length; i++) {
    while () {
      
    }

    if () {
      
    } else {
      
    }
  }
  return;
}

[레퍼런스 코드]

function computeSquareRoot(num) {
  
  const diffs = [1, 0.1, 0.01, 0.001];
  let base = 1;
  
  for (let i = 0; i < diffs.length; i++) {
    while (base * base < num) {
      base = base + diffs[i];
    }

    if (base * base === num) {
      return base;
    } else {
      base = base - diffs[i];
    }
  }
  return Number(base.toFixed(2));
}

레퍼런스 코드를 봐도 이해가 가지 않는다...

profile
console.log(frontendjigu( ☕️, 📱); // true

0개의 댓글