2020.코딩일지

[코플릿]Algorithm Basic-03_powerOfTwo 본문

algorithm

[코플릿]Algorithm Basic-03_powerOfTwo

개발하는라푼젤 2022. 7. 31. 11:50
728x90

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

입출력예시

더보기
//입출력예시
let output1 = powerOfTwo(16);
console.log(output1); // true
let output2 = powerOfTwo(22);
console.log(output2); // false

👻수포자였는데 수학개념을 익힐 수 있는 기회가 되어 기쁘다. 하하핳 두뇌의 간질간질함이 느껴진다:-0

function powerOfTwo(num) {
  if (num === 1) {
    return true;
  }

  if (num % 2) {
    return false;
  }

  let powered = 2;
  while (powered < num) {
    powered = powered * 2;
  }

  return powered === num;
}

1은 2의 0번째 거듭제곱이다.  2^{0} = 1

그래서 1은 true.

 

num%2하면 0 또는 1로만 나온다

if문에 '0은 flase, 1은 true로 인식' 하기때문에

그런데 %2의 1이라는 뜻은, '2의 거듭제곱이 아니'니까 false를 리턴해야지.

//그런데 이거 없어도 테스트통과되지만 한번 걸러주는 의미에서 인가?????

 

.........여기서부터어렵🫠

num%2하면 0인경우, while에서 환영함돠

2의거듭제곱인 powered와 입력받은 num을 계속비교한다. (powered가 num보다 작을때까지)

 

같거나 powered가 num보다 크다면?

같으면 true (16을 num으로 넣었을 때 '16<16'이 되어 ===에서 true를 뱉는다)

다르면 flase (22를 num으로 넣었을 때 '32<22'가 되어 ===에서 false를 뱉는다)

Comments