본문 바로가기
Algorithm

[구현/수학] 백준 15917 노솔브 방지문제야!! - 파이썬(Python)

by jangThang 2023. 2. 17.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    15917번: 노솔브 방지문제야!!

    어떤 수 a가 2의 거듭제곱꼴로 나타내어진다고 해 봅시다. 그렇다면, a = 2n (단 n ≥ 0인 정수) 를 만족할 겁니다. 보통, 각 비트별로 검사를 하면서, 켜져 있는 비트의 개수를 알아내는 것도 좋은

    www.acmicpc.net

     

     

    2. 문제 풀이

     어떤 수를 2의 거듭제곱 꼴로 나타낼 수 있는지를 판별합니다.

     

     

    3. 코드

    # 입력
    Q = int(input())
    for _ in range(Q):
        a = bin(int(input()))[2:]
        a_sum = sum(list(map(int, a)))
    
        if a_sum == 1:
            print(1)
        else:
            print(0)

     단순히 2의 제곱인지 판별하면 시간초과가 납니다. 이진수를 이용해야 합니다.

     이진수로 변환했을 때, 하나만 1이면 2의 제곱이겠죠. 하지만 위 코드는 시간초과가 납니다.

     

     

    import sys
    input = sys.stdin.readline
    
    for _ in range(int(input())):
        a = int(input())
        t = int(bin(a)[2:])
        if t&(-t) == a:
            print(1)
        else:
            print(0)

     sum을 구하는 것보다 더 빠른 비트 연산을 이용해야 합니다.

     

    star가 되고나서 Tistory

    반응형

    댓글