Power of Four

Power of Four

문제 내용

주어진 수가 4의 제곱으로 표현 가능한가?

 

접근 방법

주어진 수를 4로 나누어서 최종 값이 1이 되면 된다.

var isPowerOfFour = function(n) {
    if(n < 0) return false;
    while(1 < n) n /= 4;
    
    return n=== 1? true : false;
};

별거 아닌것 같긴한데 2가지 방법으로 접근이 더 가능해서 글을 남기려고 한다.

 

수학적 접근 방법

$$ n = 4^x $$

로 표현 할 수 있다.

양쪽에 $ log_4 $ 를 해주면

$ log_4 n = log_4 4^x $

로 표현 할 수 있고 이것을 더 진행하면

$ log_4 n = x log_4 4 $

$ log_4 n = x $

$ log_2^2 n = x $

$ \frac{1}{2} log_2 n = x $

로 최종 표현이 가능하다. 

x는 정확히 소숫점 없는 Integer가 되면 되는데 이것은

$ log_2 n = 2 * x $

로 표시할 수 있음으로 $ log_2 n $ 이 2로 modulation 된다면 정답이라고 볼 수 있다.

기본적으로 Math 함수에서 제공하는 log는 밑이 e가 됨으로

log 성질을 이용해서

$ log_2 n = \frac{log_e n}{log_e 2} $

로 나타낼 수 있다.

var isPowerOfFour = function(n) {
    if(n <= 0) return false;
    return (Math.log(n) / Math.log(2)) % 2 === 0 ? true : false;
};

 

이 부분을 조금더 쉽게 만들어 보면 다음과 같이 나타낼 수 있다.

$ log_4 n $은 1로 modulation 가능한가?

$ log_4 n = \frac{log_e n}{log_e 4}$ 로 변경이 가능하고 이것을 코드로 바꾸면 아래와 같이 만들 수 있습니다.

var isPowerOfFour = function(n) {
    if(n <= 0) return false;
    return getBaseLog(4, n) % 1 === 0 ? true : false;
};

function getBaseLog(x, y) {
  return Math.log(y) / Math.log(x);
}

 

728x90
반응형