isPowerOfTwo.js (7kyu 87)

Codewars 알고리즘 풀이


Problem

  • Complete the function that determines if a given non-negative integer is a power of two.
    • 음수가 아닌 정수가 2의 거듭제곱인지 확인하는 함수를 작성한다.


Solution 01

function isPowerOfTwo(n) {
  let result = 0;
  
  if (n === 0) return false;
  if (n === 1 || n === 2) return true;
  
  for (let i = 2; i < n; i *= 2) {
    result = i * 2;
  }
  
  return n === result;
}

isPowerOfTwo(0);     // false
isPowerOfTwo(1);     // true
isPowerOfTwo(2);     // true
isPowerOfTwo(3);     // false
isPowerOfTwo(4);     // true
isPowerOfTwo(5);     // false
isPowerOfTwo(1024);  // true


Solution 02

function isPowerOfTwo(n) {
  return Math.log2(n) % 1 === 0 ? true : false;
}

isPowerOfTwo(0);     // false
isPowerOfTwo(1);     // true
isPowerOfTwo(2);     // true
isPowerOfTwo(3);     // false
isPowerOfTwo(4);     // true
isPowerOfTwo(5);     // false
isPowerOfTwo(1024);  // true

Math.log2(): 숫자를 log2(숫자)로 반환한다.


Solution 03

function isPowerOfTwo(n) {
  return Number.isInteger(Math.log2(n));
}

isPowerOfTwo(0);     // false
isPowerOfTwo(1);     // true
isPowerOfTwo(2);     // true
isPowerOfTwo(3);     // false
isPowerOfTwo(4);     // true
isPowerOfTwo(5);     // false
isPowerOfTwo(1024);  // true

Number.isInteger(): 값이 정수인지 확인하고, true/false를 반환한다.