본문 바로가기

자료구조알고리즘/코드스테이츠 Coplit

03_powerOfTwo

[ 문제 ]

문제는 간단해보인다. 입력받은 수가 2의 거듭제곱인지의 여부를 boolean값으로 반환하는 것이다.

입출력 예시를 보면, 입력받은 수인 16은 2^4, 즉 2의 4, 2의 거듭제곱이므로 true값을 반환하고

22는 2의 거듭제곱이 아니므로 false값을 반환한다.

 

단, 주의사항은 while 반복문을 사용해야 한다는 것!

 

 

[ 풀이 ]

내가 작성한 로직은 다음과 같다.

1/ 먼저 입력받은 수가 1인 경우에는 2의 0승이므로 true값을 반환시킨다.

2/ 입력받은 수가 1이 아닌 경우, 초기값이 2인 while 반복문을 이용하여 2를 곱해줌으로써 2의 거듭제곱으로 만든다.

그 값이 num과 일치하면 true를, 그렇지 않으면 false를 반환시킨다.

function powerOfTwo(num) {
  if(num === 1){ //먼저 num값이 1이면 2의 0승이므로, true를 return한다.
    return true;
  } 
  
  let result = 2; //초기값을 2로 한다.
  while(result < num){ //result가 num보다 작으면 반복문을 실행한다.num과 같거나 크다면 반복문을 멈춘다.
    result = result * 2; //반복문이 실행될때마다 이전 result값에 2를 곱한다.
  }
  if(result === num){ //반복문이 멈춘 후, result가 num과 같다면 2의 거듭제곱이니 true값을 반환.
    return true;
  }
  return false; //result가 num과 다르다면, false 반환
}

 

 

[ 레퍼런스 ]

레퍼런스를 보면, 

나의 풀이와 동일하게 먼저 num === 1인 경우, true를 반환시킨다.

그리고는 num을 2로 나눈 나머지 값이 1이면(즉, 홀수이면) false값을 반환시킨다. 

(오! 먼저 홀수인 경우를 return시켜줘도 되겠군!)

 

그리고는 반복문은 동일한데 나처럼 result === num이 동일할때는 true, 아니면 false 이렇게 일일이 적지않고,

바로 return powered === num; 을 적었다...

훨씬 깔끔하다!

나도 다음부터 바로 불린값이 나오도록 적어야지!

 

'자료구조알고리즘 > 코드스테이츠 Coplit' 카테고리의 다른 글

06_letterCapitalize  (0) 2022.02.09
05_firstReverse  (0) 2022.02.09
04_firstCharacter  (0) 2022.02.07
02_computeWhenDouble  (0) 2022.02.04
01_transformFirstAndLast  (0) 2022.02.02