수를 입력받아 2의 거듭제곱인지 여부를 리턴해야 합니다.
예시
let output1 = powerOfTwo(16); console.log(output1); // true let output2 = powerOfTwo(22); console.log(output2); // false
생각
1. 2의 거듭제곱이므로 짝수다. 짝수의 특징은 2로 계속 나누었을 때 나머지가 0이 나오거나 2를 계속 뺐을 때 0이 나온다는 성질을 이용해보자.
2. while문을 사용해야 하므로, 주어진 값이 true일 때 까지 2로 나누거나 빼보자
풀이
function powerOfTwo(num) { if(num === 1) { return true; } if (num % 2 !== 0){ return false; } let powered = 2; while(powered < num){ powered = powered * 2 } return powered === num; }
깨달은 점
1. 주어진 수가 짝수인 경우, 초기값이 2인 변수에 계속 2를 곱하면 언젠가 만난다는 사실을 갖고 while문을 통해 해결한 코드를 보고 이런 아이디어도 있구나 라고 느꼈다.
2. 내가 생각한 짝수의 개념은 2의 배수만 골라내지 못하기 때문에 한계가 있음을 알게됐다.