상세 컨텐츠

본문 제목

알고리즘 문제풀이 - powerOfTwo

Programming Language/JavaScript

by Yongari 2022. 12. 19. 21:27

본문

 

문제 설명 : 이 문제는 수를 입력 받은 뒤 2의 거듭제곱인지 확인 후 리턴하는 문제이다. 

처음에 접근을 2로 나누는 것을 계속 재귀로 해야하나? 라고 생각했지만 아무리 생각해도 재귀로 답을 찾지 못했다. 

이후 2를 곱하다가 2의 배수일 경우 2의 거듭제곱이니 true 아니면 false를 하는 코드 레퍼런스를 봤다. 그래서 문제와 풀이코드는 다음과 같다. 

 

 

문제

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

입력

인자 1 : num

  • number 타입의 정수 (num >= 1)

출력

  • boolean 타입을 리턴해야 합니다.

주의 사항

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

입출력 예시

let output1 = powerOfTwo(16);
console.log(output1); // true
let output2 = powerOfTwo(22);
console.log(output2); // false

 

풀이코드 설명

function powerOfTwo(num) {
   //입력받은 수가 1이면 true
   //2의 0승은 1이다. 
   if (num === 1) {
    return true;
  }
  //2로 나눈 나머지가 1이면 false 반환, 즉 홀수면 false 반환
  if (num % 2) {
    return false;
  }
  let powerNum = 2;
  //powerNum이 num보다 작을 경우 무한 루프
  while (powerNum < num) {
    powerNum *= 2;
  }
  //boolean값으로 반환
  return powerNum === num;
}

 

출처 : 코드스테이츠 알고리즘

관련글 더보기