Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 숫자의 첫 번째와 마지막 비트만 설정되어 있는지 확인하는 방법

숫자 n이 주어졌을 때, 이 숫자가 첫 번째 비트(최상위 비트)와 마지막 비트(최하위 비트)에만 1이 설정되어 있는지 확인해야 합니다.

예를 들어, 입력값이 n = 17이라면 출력은 True입니다. 17의 이진수 표현은 10001로, 첫 번째 위치와 마지막 위치에만 1이 두 개 존재하기 때문입니다.

해결 접근 방법

이 문제는 다음 단계를 통해 해결할 수 있습니다:

  • n이 1과 같다면 True를 반환합니다.
  • 그렇지 않으면, n - 1이 2의 거듭제곱인지 확인합니다. 2의 거듭제곱이라면 True, 아니라면 False를 반환합니다.

핵심 아이디어는 다음과 같습니다. 첫 번째와 마지막 비트만 설정된 수는 2k + 1 형태입니다. 따라서 n - 1은 2k가 되며, 이 값이 2의 거듭제곱인지만 검사하면 됩니다. 2의 거듭제곱 여부는 비트 연산 (n & (n-1)) == 0을 통해 간단히 판별할 수 있습니다.

예제 코드

def is_pow_of_two(n):
    return (n & n-1) == 0

def solve(n):
    if n == 1:
        return True
    return is_pow_of_two(n-1)

n = 17
print(solve(n))

입력

17

출력

True