문제 설명 : 이 문제는 수를 입력 받은 뒤 2의 거듭제곱인지 확인 후 리턴하는 문제이다.
처음에 접근을 2로 나누는 것을 계속 재귀로 해야하나? 라고 생각했지만 아무리 생각해도 재귀로 답을 찾지 못했다.
이후 2를 곱하다가 2의 배수일 경우 2의 거듭제곱이니 true 아니면 false를 하는 코드 레퍼런스를 봤다. 그래서 문제와 풀이코드는 다음과 같다.
문제
수를 입력받아 2의 거듭제곱인지 여부를 리턴해야 합니다.
입력
인자 1 : num
출력
주의 사항
입출력 예시
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;
}
출처 : 코드스테이츠 알고리즘
알고리즘 문제풀이 - firstReverse (0) | 2022.12.20 |
---|---|
알고리즘 문제풀이 - firstCharacter (0) | 2022.12.19 |
computeWhenDouble 알고리즘 문제 풀이 (0) | 2022.12.16 |
transformFirstAndLast 알고리즘 문제 풀이 (0) | 2022.12.16 |
[DFS] 바코드 (0) | 2022.12.14 |