2의 n제곱인지 확인하기

문제 설명

정수 n이 주어졌을때 n이 2의 거듭제곱이라면 True를 아니라면 False를 반환해라 (1은 2의 0승이므로 2의 n제곱이다.)

INPUT 예시

2 10 32

OUTPUT 예시

True False True

OUTPUT 설명

2는 2^1이므로 2의 n제곱이다.

10은 2*5이므로 2의 n제곱이 아니다.

32는 2^5이므로 2의 n제곱이다.


문제 풀이

1은 이진수로 0001, 2는 0010, 4는 0100, 8은 1000, 16은 10000이다.

2가 이진수로 10이고 1이 01이므로 비트연산 &을 하면 00이 나온다.

4가 이진수로 100이고 3이 011이므로 비트연산 ‘&’을 하면 000이 나온다.

이와 같이 n이 2의 n제곱이라면 n & (n-1)을 하게 되면 0이 나온다.

def solution(n):
    if (n & (n - 1)):
        return False
    else:
        return True