computeSquareRoot

이성민·2023년 5월 18일

문제가 뭔가 마음에 들어서 그냥 적어둔다. 쉬웠지만 그냥 뭔가 재미있어서 갑자기 올린다.

문제

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

입력

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

출력

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

주의 사항

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

입출력 예시

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

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

내가 푼 코드

function computeSquareRoot(num) {
  let r = 0; 
  while( r*r < num) { //r의 제곱이 num이 될때
    r += 0.001;       //근사값을 찾기 위해 0.001을 더했음
    }
  return Number(r.toFixed(2));   //number타입으로 바꾸고 소수점 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));
}

뭐가 많길래 순간 당황했지만 비슷하게 푼거같다. 근데 diff배열에 0.01, 0.001은 그렇다치고
1, 0.1은 왜 넣은건지 모르겠다. 저걸 넣을 케이스가 나오는건가?

profile
도전자

0개의 댓글