Daily Coding 3

Haizel·2022년 11월 21일
0

🧬 알고리즘 풀이

목록 보기
13/53
post-thumbnail

수를 입력받아 2의 거듭제곱인지 여부를 리턴하여라

  • 반복문(while)문을 사용해야 합니다.
  • 2의 0승은 1입니다.
  • Number.isInteger, Math.log2, Math.log 사용은 금지됩니다.
function powerOfTwo(num) {
//2의 0승인 1은 true
  if(num === 1){
    return true;
  }
  //num이 홀수(2로 나눈값에 나머지가 있다면)라면 무조건 false;
  if(num%2) {
    return false;
  }
  //2를 거듭제곱해서 비교할 수의 초기값은 2
  let powered = 2;
 //poweredNum이 num보다 작을때까지만 while문 진행
  while(powered < num) {
    powered *= 2; // poweredNum에 2을 곱한 후 다시  poweredNum에 대입
  }
  //반복이 끝나면 poweredNum과 num이 같은지 비교값을 리턴
  return powered === num;   
}
  

  • 비트연산자(&)을 이용한 코드
function powerOfTwo(num) {
 //n & (n-1) === 0 이면 2의 거듭제곱이다.
 //따라서 0이면 if(false)이므로 true가 리턴되고, 1이면 if(true)기 때문에 false가 리턴된다.
  if(num & (num-1) || num === 0){
     return false;
  }
  return true;
}
profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글