[ 문제 ]
문제는 간단해보인다. 입력받은 수가 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 |