Koala - 9기/기초 알고리즘 스터디

[백준/Python] #15917 노솔브 방지문제야!!

future0610 2023. 1. 5. 14:25

 

 

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

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

www.acmicpc.net

문제 풀이

자연수 $n$에 대하여 $n$을 2의 거듭제곱으로 나타낼 수 있다면 이진수로 나타내었을 때 모든 자릿수에서 1이 하나 뿐일 것이다. 이진수는 0과 1로만 구성되어 있으므로 모든 자릿수의 합은 1의 개수가 된다. 따라서 $n$을 이진수로 나타냈을 때 모든 자릿수의 합이 1이면 1, 1이 아니라면 0을 출력한다.

 

소스 코드

Q = int(input())
ans = []
for _ in range(Q):
    input = __import__('sys').stdin.readline
    a = int(input())
    ans.append(a)

for x in ans:
    a = list(bin(x)[2 :])
    a = list(map(int, a))
    if sum(a) == 1:
        print(1)
    else:
        print(0)