[JS]_daily coding 3

seul·2022년 5월 29일
0

Algorithm

목록 보기
2/31

코플릿 데일리코딩 3번


수도코드

  1. 2의 거듭제곱인지 여부를 boolean으로 리턴해야 함
  2. 1은 예외로 둠(return true)
  3. 홀수는 아예 제외
  4. 거듭제곱 판별 방법
    4-1. num을 2로 나눈 몫을 계속 2로 나눈다. num = num /2
    4-2. 32/ 2 = 16 > 16/2 = 8 > 8/2 = 4 >4/2=2 // num이 2-> 2의 거듭제곱임
    4-3. 6 /2 = 3 => 3/2 = 1.5 => 1.5 / 2 = 0.75 //num 이 1보다 작아서 while문을 빠져나옴 -> 2의 거듭제곱 아님
function powerOfTwo(num) {
  // 2의 거듭제곱인지 여부를 boolean으로 리턴 
  if (num === 1) { // 1은 2^0 이니까 true
    return true; 
  }
  
  if (num % 2) {    // 홀수는 false
    return false; 
  }

  while (num > 1) { 
    num = num /2  
    if (num === 2) {
      return true;
    }  
  }
  return false 
}

작성하고 보니 코드가 깔끔하지 않은 것 같아서 레퍼런스 코드를 봤다. 레퍼런스 코드에서는 입력된 num과 같아질때까지 2를 계속 곱해주는 식으로 구현했다.

function powerOfTwo(num) {
  if (num === 1) {
    return true;
  }

  if (num % 2) {
    return false;
  }

  let powered = 2;
  while (powered < num) {
    powered = powered * 2;
  }

  return powered === num;
}
profile
Connecting dots

0개의 댓글