https://www.acmicpc.net/problem/15917
소스코드
input = __import__('sys').stdin.readline
q = int(input())
for i in range(q):
cnt=0
a = int(input())
if a == 1:
cnt += 1
print(1)
while a % 2 != 1:
if a // 2 == 1:
cnt+=1
print(1)
break
else:
a = a // 2
if cnt == 0:
print(0)
문제풀이
2의 거듭제곱이 아닌 경우의 조건은 무엇일까에 집중하며 문제에 접근했다. 2의 거듭제곱이 아니라면 a를 2로 계속 나누다보면 언젠가는 나머지가 1이 되는 상황이 발생한다(1의 경우 제외).
하지만, 나머지가 1로 나타나기 전까지는 2의 배수인 수들은 몇번이고 나머지가 0이 나올 수 있다. while문을 통해서 나머지가 1인 경우를 제외하곤 a를 계속 2로 나누게 하였다.
2로 나누다가 몫이 1이 되는 경우는 a가 2의 거듭제곱이라는 것을 의미하기에 if문을 통해 1을 출력했다.
나머지가 1이 되어 while문을 빠져나온 경우에는 0을 출력했다. 1을 출력한 후 탈출한 경우와 구분짓기 위해 cnt를 이용해주었다.
'Koala - 9기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/JS] 10869번 사칙연산 (0) | 2023.01.08 |
---|---|
[백준/python] 팬그램 (0) | 2023.01.07 |
[백준/Python] #14681 사분면 고르기 (0) | 2023.01.06 |
[백준/Python] #2739 구구단을 외자 x2 (0) | 2023.01.06 |
[백준/Python] 20540번 연길이의 이상형 (0) | 2023.01.06 |