새소식

프론트엔드 공부/자료구조 & 알고리즘

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

  • -

computeSquareRoot

문제

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

입력

인자 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)을 이해할 수 있다면, 해당 식을 이용해 문제를 풀어도 좋습니다.

코드

// 작성코드
function computeSquareRoot(num) {
  // 제곱근 제곱근(Square root)은 어떤 수의 어떤 수에 걸쳐 곱해지면 원래의 수가 되는 수. 예를 들어, 9의 제곱근은 3이고, 4의 제곱근은 2입니다. 어떤 수 x의 제곱근은 √x로 표시.
  // Math.pow(밑, 지수)주어진 밑 값을 주어진 지수 값으로 거듭제곱한 숫자 값.
  // toFixed 소수점 이하가 길면 숫자를 반올림하고, 짧아서 부족할 경우 뒤를 0으로 채울 수 있다
  // Math.pow 이용해 num의 0.5제곱(=1/2제곱)을 진행해주면 num의 루트값이 나오게 되며 이를 toFixed로 소수점 2번째 자리까지 반환
  // 숫자의 제곱근을 구하는 것은 그 숫자를 0.5 승으로 높이는 것과 같다. 표현식 Math.pow(num, 0.5)는 num의 제곱근
  return Number((Math.pow(num, 0.5)).toFixed(2));
}



//레퍼런스
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));
}

 

참고: 바닐로니아 공식사용
https://s-realstory.tistory.com/17

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.