반응형
[ Contents ]
1. 문제 (링크 참조)
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을 구하는 것보다 더 빠른 비트 연산을 이용해야 합니다.
반응형
'Algorithm' 카테고리의 다른 글
[구현/수학] 백준 1703 생장점 - 파이썬(Python) (0) | 2023.02.19 |
---|---|
[구현/수학] 백준 5613 계산기 프로그램 - 파이썬(Python) (1) | 2023.02.18 |
[구현/수학] 백준 4470 줄번호 - 파이썬(Python) (0) | 2023.02.16 |
[구현/수학] 백준 7510 고급 수학 - 파이썬(Python) (0) | 2023.02.15 |
[구현/수학] 백준 9517 아이 러브 크로아티아 - 파이썬(Python) (0) | 2023.02.14 |
댓글