201224 - 알고리즘

jungeundelilahLEE·2020년 12월 23일
0

Daily Algorithm

목록 보기
10/19

[토이9]

power

문제
두 수를 입력받아 거듭제곱을 리턴해야 합니다.

입력
인자 1: base
number 타입의 자연수 (base >= 2)
인자 2: exponent
number 타입의 정수 (exponent >= 0)

출력
number 타입을 리턴해야 합니다.
실제 계산 결과를 1000000009로 나눈 나머지를 리턴해야 합니다.

주의사항
Math.pow, 거듭제곱 연산자 사용은 금지됩니다.
시간복잡도 O(logN)을 만족해야 합니다.
나머지를 구하는 이유는 계산 결과가 컴퓨터로 나타낼 수 있는 수의 범위를 넘을 수 있기 때문입니다. 하지만 모든 연산이 끝난 뒤에 그 결과를 1000000009로 나누려고 해서는 안 됩니다. 연산 중간에도 이 범위를 넘을 수 있기 때문에, 연산을 할 때마다 나머지를 구하고 그 결과에 연산을 이어가시기 바랍니다.


function power(base, exponent) {
  // 재귀
  return exponent===0 ? true : (base * power(base, exponent-1))

  // ref
   if (exponent === 0) return 1;

  const half = parseInt(exponent / 2);
  const temp = power(base, half);
  const result = (temp * temp) % 1000000009;

  if (exponent % 2 === 1) return (base * result) % 1000000009;
  else return result;
}

// 아.. 수학 시르다

profile
delilah's journey

0개의 댓글