나의 모양

[DailyCoding] 03 | powerOfTwo 본문

SEB/Daily Coding

[DailyCoding] 03 | powerOfTwo

kexon 2022. 7. 26. 01:49

✍🏻 Description

  • 2의 거듭제곱 여부 판단
  • 거듭제곱: 같은 수를 거듭하여 곱함 ⇒ 주어진 수를 주어진 횟수만큼 반복

📝 Flow

- 2의 거듭제곱?
    2의 0승 == 1
    2 * 2 = 4
    2 * 2 * 2 = 8
    2 * 2 * 2 * 2 = 16
    2 * 2 * 2 * 2 * 2 = 32

- 짝수라고 다 거듭제곱은 아님 => 6, 10 이런거
	6 = 2 * 3
	10 = 2 * 5

- 로직흐름: 2로 나눈 나머지는 다 0?

초기값: 8
         | 몫 | 나머지
    1회차 | 4 |  0
    2회차 | 2 |  0

초기값: 10
         | 몫 | 나머지
    1회차 | 5 |  0
    2회차 | 2 |  1

초기값: 7
         | 몫 | 나머지
    1회차 | 3 |  1
    2회차 | 1 |  1

=> 나머지가 1이 하나라도 있으면 거듭제곱 X
=> 모두 0이면 거듭제곱!!!

🤯 Difficulty

  • 거듭제곱의 정확한 정의를 몰랐음
  • 짝수라고 다 거듭제곱이 아님
  • 2의 0승을 0으로 착각 (...)

🪆 Attempt

  • 거듭제곱 검색
  • 손으로 직접 그려보면서 흐름 파악

📚 TIL

  • 거듭제곱이 무엇인지 알게 됨

👩🏻‍💻 Implementation

if(num == 2) return true;

while(num > 2) {
  num /= 2;
  long rest = num % 2;

  if(rest == 1) return false;
}

return true;
Comments