코플릿/toyproblem

toy problem 09

테오구 2021. 10. 19. 09:58
728x90

문제 : power

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

 

  • Math.pow 사용 금지
  • O(logN)을 만족해야 한다.
  • 나머지를 구하는 이유는 계산 결과가 컴퓨터로 나타낼 수 있는 수의 범위를 넘을 수 있기 때문이다. 하지만 모든 연산이 끝난 뒤에 그 결과를 94,906,249로 나누려고 해서는 안 된다. 연산 중간에도 이 범위를 넘을 수 있기 때문에, 연산을 할 때마다 나머지를 구하고 그 결과에 연산을 이어가야 한다.

 

let output = power(3, 40);
console.log(output); // --> 19334827

문제의 접근

시간 복잡도 O(logN)을 만족해야한다. 먼저 O(logN)의 복잡도를 가지는 알고리즘은 무엇일까? 라는 질문에서 접근을 해야한다. 이 복잡도를 가진 다는 말은 연산을 거듭할 수록 데이터의 양이 줄어든다는 뜻이다.

 

function power(base, exponent) {
  // todo: 여기에 코드를 작성합니다.
  if(exponent === 0){
    return 1
  }
  const half = power(base, parseInt(exponent/2))
  const result = (half * half) % 94906249;
  if(exponent%2 === 0){
    return result
  }else{
    return (result * base) % 94906249
  }
}

 

parseInt() 함수는 문자열 인자를 구문분석하여 특정 진수(수의 진법 체계에 기준이 되는 값)의 정수를 반환합니다.

나머지를 구하는 이유는 계산 결과가 컴퓨터로 나타낼 수 있는 수의 범위를 넘을 수 있기 때문

728x90

'코플릿 > toyproblem' 카테고리의 다른 글

toy problem 14  (0) 2021.10.26
toy problem 04  (0) 2021.10.21
toy problem 03  (0) 2021.10.20
toy problem 02  (0) 2021.10.20
toy problem 01  (0) 2021.10.20