Leetcode Java Power of Two

업데이트:

문제

Link

코드

class Solution {

  public boolean isPowerOfTwo(int n) {
    if (n > 0) {
      return (n & (n - 1)) == 0;
    } else {
      return false;
    }
  }

}

결과

Link

설명

  1. 2를 거듭제곱(Exponentiation)하여 나온 결과가 정수 n이 되는지 검증하는 문제이다.
    • 단, 반복과 재귀 호출을 사용하지 않고 푸는 방식을 요구한다.
  2. n이 0 초과일 경우, 아래의 경우의 따라 주어진 문제의 결과로 반환한다.
    • n과 $n - 1$의 AND(&) 비트 연산자의 결과가 0인 경우 true를, 아니면 false를 반환한다.
      • 2의 배수는 2진수로 맨 앞자리가 1이고 뒷자리는 0으로 채워지며, 2의 배수에서 1을 뺀 경우 맨 앞자리가 0이고 뒷자리는 1로 채워지므로 2의 배수와 2의 배수에서 1을 뺀 값의 AND(&) 비트 연산을 수행한 결과는 무조건 0이 될 수 밖에 없다.
      • 간단한 예제로 n이 4인 경우, 4는 2진수로 100, $4 - 1 = 3$이므로 2진수로 011로 표현이 된다.
      • 위의 설명을 토대로 비트 연산을 통해 $100 & 011 = 0$이 된다.
  3. n이 0 이하일 경우 2의 거듭제곱으로 표현이 불가능하므로, false를 주어진 문제의 결과로 반환한다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기