- 수를 입력받아 2의 거듭제곱인지 여부를 리턴해야 합니다.
function powerOfTwo(num) {
let i = 0
while (i<num) {
if ( num === 1 ) { return true }
else if (num % 2 === 0) {
num = num / 2
} else { return false }
i++
}
return true
}
function powerOfTwo(num) {
let i = 2
while (i<=num) {
if ( num === 1 ) { return true }
if ( num !== 1 && num % i === 1) {
num = num % i
}
i += 2
}
return false
}
i 반복문이니 i를 돌려야한다는 생각을 해서.. i를 넣었다가 시간초과가 나왔었다
심지어 i의 범위도 등호를 뺏어야 하는데.. 아직도 확실치 않은 부분 ㅠㅠ
게다가 2부터 시작을해서 num이 1인경우는 실행이 되지 않았다
그리고 마지막에 false가 아니라 true를 출력했어야했는데.. 바보였음
아직도 while문을 제대로 못 쓰는 사람이 있따??????????? ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 나야나
뭐 그래서 어찌저찌 꾸역꾸역 성공했다.. 확 맘에드는 코드 구성은 아니지만..ㅠ ㅠ 성공에 의의를 두며
if (num === 1) {
return true;
}
if (num % 2) {
return false;
}
let powered = 2;
while (powered < num) {
powered = powered * 2;
}
return powered === num;
}
레퍼런스는 num가 1인 것, 그리고 2로 나눴을 때 나머지가 있는 것들을 먼저 빼주었음
그리고 나는 계속 나누어 나가는 방식을 이용했는데, 레퍼런스는 num가 될때까지 곱해 나가는 방식을 이용했다.