수를 입력받아 2의 거듭제곱인지 여부를 리턴해야 합니다.
인자 1 : num
number 타입의 정수 (num >= 1)
출력
boolean 타입을 리턴해야 합니다.
주의 사항
반복문(while
)문을 사용해야 합니다.
2의 0승은 1입니다.
Number.isInteger
, Math.log2
, Math.log
사용은 금지됩니다.
let output1 = powerOfTwo(16);
console.log(output1); // true
let output2 = powerOfTwo(22);
console.log(output2); // false
num
이 1이 아닌 경우while
으로 제곱근을 계속해서 만든다.function powerOfTwo(num) {
if(num === 1) return true;
while ((num % 1) === 0 && num > 0) {
if(num === 2) return true;
num = Math.sqrt(num);
}
return false;
}
true
값이 반환되어야 하는 데 false
를 returnnum
으로부터 내림차순으로 확인하고자 하는 방법에 어려움을 발견while
문에 num
을 넣어서 거듭제곱이 맞는지 확인하는 방법이 필요function powerOfTwo(num) {
// 예외처리
// num이 1이거나 2의 배수가 아닌 경우
if (num === 1) return true;
if (num % 2) return false;
// 거듭제곱을 만드는 while문
// 확인하기 위한 범위 ( < num )
let powered = 2;
while (powered < num) {
powered = powered * 2;
}
return powered === num;
}
true
홀수면 false
num
을 확인하기 위해num
에 직접 연산을 가할 필요 ❌num
을 그대로 두고 비교식과 범위를 작성