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를 반환한다.