[22.09.22] Daily Coding 3

동화·2022년 10월 5일
0

Daily-Coding

목록 보기
2/15

  1. 수를 입력받아 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가 될때까지 곱해 나가는 방식을 이용했다.

0개의 댓글