알고리즘 - 2의 n제곱 판별
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