알고리즘 3번 powerOfTwo

Judo·2021년 1월 11일
0
post-custom-banner

문제


수를 입력받아 2의 거듭제곱인지 여부를 리턴해야 합니다.

주의사항


  • 반복문(while)문을 사용해야 합니다.
  • 2의 0승은 1입니다.
  • Number.isInteger, Math.log2, Math.log 사용은 금지됩니다.

풀이 코드


function powerOfTwo(num) {
  // TODO: 여기에 코드를 작성합니다.
  /**
   * 1. num을 입력받는다.
   * 2. num을 >= 1 인 동안 while문을 이용해 반복해서 돌린다.
   * 3. while문안에선 num = num / 2 ; 을 이용해 num을 계속 줄여나간다.
   * 4. 만약 while안에서 num === 1인 경우는 num이 2로 나뉘어지다가 num이 2가 된 상태에서 나올 수 있는 경우다.
   * 5. 그러므로 반복문을 통해 num === 1인 경우는 2로 계속 나누어 떨어진 경우이므로 2의 거듭제곱이 될 수 있다.
   * 6. 하지만 아닌 경우 return false 한다.
   * 
   */
  while(num >= 1){
    if(num === 1){
      return true;
    }
    num = num / 2;
  }
  return false;
  

}

어려웠던 점


처음 문제를 읽고 2의 거듭 제곱을 구해야 하는데 num의 범위가 주어지지 않으니 오름차순으로 2의 거듭제곱을 판별하려고 생각했을 때 2의 거듭제곱이 아닌 경우 무한 루프가 나올거라 생각이 들었다. 그래서 고민하다 내림차순으로 계산을 한 경우 num >= 1인 조건이 있으므로 무한 루프가 되는 일이 없을 것이라 판단했다.

KEY


num을 계산할 때 내림차순으로 계산하기 위해 num = num / 2 을 이용했다. 계속 나눴을 때 num === 1 이 된다면 num은 2의 거듭제곱일 것이고 그게 아니라면 반복문을 벗어나 false를 리턴하면 된다.

profile
즐거운 코딩
post-custom-banner

0개의 댓글