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)
'Koala - 9기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/Python] #15917 노솔브 방지문제야!! (0) | 2023.01.06 |
---|---|
[백준/C++] 2742번: 기찍 N (0) | 2023.01.05 |
[백준/Python] 14579번 덧셈과 곱셈 (0) | 2023.01.05 |
[백준/C] 10797번 (0) | 2023.01.04 |
[백준/Python] 20540번 연길이의 이상형 (0) | 2023.01.04 |
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)
'Koala - 9기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/Python] #15917 노솔브 방지문제야!! (0) | 2023.01.06 |
---|---|
[백준/C++] 2742번: 기찍 N (0) | 2023.01.05 |
[백준/Python] 14579번 덧셈과 곱셈 (0) | 2023.01.05 |
[백준/C] 10797번 (0) | 2023.01.04 |
[백준/Python] 20540번 연길이의 이상형 (0) | 2023.01.04 |