πŸ“‚ Base/μ•Œκ³ λ¦¬μ¦˜

제곱근 값을 μ†Œμˆ˜μ  두 μžλ¦¬κΉŒμ§€ λ¦¬ν„΄ν•˜κΈ° : feat. λ°”λΉŒλ‘œλ‹ˆμ•„ λ²•μ˜ 점화식, parseInt( )와 Number( )의 차이

Dev. Ella 2023. 4. 6. 23:57

πŸ“œ 문제

수λ₯Ό μž…λ ₯λ°›μ•„ μ œκ³±κ·Ό κ°’을 μ†Œμˆ˜μ  λ‘ μžλ¦¬κΉŒμ§€ λ¦¬ν„΄ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

⚠️ μ£Όμ˜μ‚¬ν•­

Math.sqrt μ‚¬μš©μ€ κΈˆμ§€λ©λ‹ˆλ‹€.

 

✍🏻 λ‚΄ 풀이

function computeSquareRoot(num) {

  // pseudo code
  // let originNum = 9;
  // let approxNum = originNum / 2;
  // while((approxNum * 2) !== originNum){
  //   approxNum = (approxNum + (originNum / approxNum) / 2) 
  // }

  let approxNum = num / 2;
  while((approxNum ** 2) !== num){
    if(Number((approxNum ** 2).toFixed(2)) === num) {
      break;
    }
    approxNum = (approxNum + (num / approxNum)) / 2;
  }
  return Number(approxNum.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));
}

 

πŸ’‘ μ•Œμ•„λ‘λ©΄ 쒋을 κ°œλ…

λ°”λΉŒλ‘œλ‹ˆμ•„ λ²•μ˜ 점화식

Xn은 λ§κ·ΈλŒ€λ‘œ 근사값이기 λ•Œλ¬Έμ—, S에 루트λ₯Ό μ”Œμš΄ 값에 κ°€μž₯ κ°€κΉŒμšΈ 것이라 μƒκ°ν•˜λŠ” 근사값을 λ„£μ–΄μ£Όλ©΄ λœλ‹€. μ–΄λ–€ 값을 λ„£λ“ μ§€ 점화식을 λ°˜λ³΅ν•˜λ‹€λ³΄λ©΄ κ²°κ΅­ Xn+1이 S의 μ œκ³±κ·Όμ— κ·Όμ ‘ν•˜λŠ” μˆœκ°„μ΄ μ˜¨λ‹€.

// psuedo code
let 근사값 = μ›λž˜ 숫자 / 2;
while((근사값**2) !== μ›λž˜μˆ«μž) {
	근사값 = (근사값 + (μ›λž˜μˆ«μž / 근사값) / 2
}

*와 **의 차이점

2*3 = 6 // 2 κ³±ν•˜κΈ° 3
2**3 = 8 // 2의 3승

μ†Œμˆ˜μ  자리수

toFixed( ) λ©”μ†Œλ“œλŠ” μ†Œμˆ˜μ  n자리 μˆ˜κΉŒμ§€ λ‚˜νƒ€λ‚œλ‹€. 

var numObj = 12345.6789;

numObj.toFixed(); // '12346': λ°˜μ˜¬λ¦Όν•˜λ©°, μ†Œμˆ˜ 뢀뢄을 남기지 μ•ŠμŒ
numObj.toFixed(1); // '12345.7': μ†Œμˆ˜μ  1μžλ¦¬κΉŒμ§€ 남기고 반올림
numObj.toFixed(6); // '12345.678900': 빈 곡간을 0으둜 채움

Number ( )

Number( ) λŠ” JavaScript ν‘œμ€€ λ‚΄μž₯ κ°μ²΄λ‘œμ„œ, ν•¨μˆ˜λ‘œ μ‚¬μš©ν•˜λ©΄ λ¬Έμžμ—΄μ΄λ‚˜ λ‹€λ₯Έ 값을 Numberνƒ€μž…μœΌλ‘œ λ³€ν™˜ν•œλ‹€. λ§Œμ•½ 숫자둜 λ³€ν™˜ν•  수 μ—†μœΌλ©΄ NaN을 λ¦¬ν„΄ν•œλ‹€.

Number('123'); // 숫자 123을 λ°˜ν™˜
Number('123'); === 123; // true

Number('ella'); // NaN
Number(undefined); // NaN
// μΆ”κ°€: parseInt()μ™€μ˜ μ°¨μ΄λŠ”?
// parseInt(): λ¬Έμžμ—΄μ—μ„œ μ •μˆ˜λ§Œ λ½‘μ•„μ„œ λ³€ν™˜
// Number(): λ¬Έμžμ—΄ 전체가 숫자일 λ•Œ μ†Œμˆ˜μ κΉŒμ§€ 숫자 νƒ€μž…μœΌλ‘œ λ°˜ν™˜

let year = '2023년도'
parseInt(year); // 2023
Number(year); // NaN

let year = '이제 2023년도'
parseInt(year); // NaN
Number(year); // NaN

let year = '2023.123';
parseInt(year); // 2023
Number(year); // 2023.123

 

πŸ‘©πŸ»‍πŸ’» 배운 점

이번 ν•œ λ¬Έμ œμ—μ„œ 배운 κ°œλ…, λ‹€μ‹œ ν•œλ²ˆ 읡힌 κ°œλ…μ΄ 정말 λ§Žλ‹€. λΉ„μŠ·ν•΄ λ³΄μ΄λŠ” λ©”μ†Œλ“œλΌλ„ 상황에 따라 λ‹€λ₯΄κ²Œ μ‚¬μš©λ  수 μžˆκΈ°μ— μ‚¬μ†Œν•œ 차이라도 잘 μ•Œμ•„λ‘μ–΄μ•Όκ² λ‹€κ³  μƒκ°ν–ˆλ‹€.

 

 

πŸ“Ž μ°Έκ³  자료

- Blog: parseInt()와 Number()의 μ°¨μ΄

- Blog: μžλ°”μŠ€ν¬λ¦½νŠΈ Math.sqrt( ) μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ œκ³±κ·Ό κ΅¬ν•˜κΈ°