📂 Base/알고리즘

2의 거듭제곱인지 여부를 리턴하기

Dev. Ella 2023. 3. 21. 14:42

📜 문제

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

 

⚠️ 주의사항

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

 

✍🏻 내 풀이

function powerOfTwo(num) {
  // 입력: num
  // 출력: 2의 거듭제곱인지 여부 boolean 타입 리턴
  // 주의: while문 사용, 2의 0승은 1

  // num이 1이면 무조건 true
  if (num === 1) {
    return true;
  }
  // num이 홀수면 무조건 false
  if (num % 2 === 1) {
    return false;
  }
  // 2를 거듭제곱해서 비교할 수의 초기값은 2
  let poweredNum = 2
  
  // poweredNum이 num보다 작을때까지만 while문 진행
  while(poweredNum < num) {
    poweredNum = poweredNum * 2;
  }
  // 반복이 끝나면 poweredNum와 num이 같은지 비교값 리턴
  return poweredNum === num;
}

 

💡 알아두면 좋을 개념

조건문, while 반복문

 

👩🏻‍💻 배운 점

1. 비교할 숫자는 초기값 설정을 해줄 것

2. 특정 숫자가 홀수인지 여부를 판단하는 것은 아래와 같이 두 가지 방법으로 작성할 수 있다.

  // 1. num이 홀수면 무조건 false
  if (num % 2 === 1) {
    return false;
  }
  
  // 2. num이 홀수면 무조건 false
  if (num % 2) {
    return false;
  }