728x90
수의 이진표현에 대한 문제가 되겠다.
import math
a,b = map(int,input().split())
def f(a,b):
if a == 0 and b == 0:
return -1
elif a == 0 and b != 0:
return "-"
elif a == 1 and b == 1:
return "*"
#이제 비트마스킹을 활용해야함
else:
for i in range (1,64):
t = a * ((2 ** i) - 1) // b
if b * t == a * ((2 ** i) - 1):
x = format(t, 'b') #주어진 숫자를 2진수로 변환해야할 필요가 있음
if i >= len(x):
new_x = "0" * (i - len(x)) + x
ans = ""
for j in range (0,i):
if new_x[j] == "0":
ans += "-"
else:
ans += "*"
if len(ans) >= 61:
return -1
return ans
return -1
print(f(a,b))
재밌는 문제였던 것 같다.
'코딩' 카테고리의 다른 글
[BOJ, 백준] 1111 IQ Test Python (1) | 2024.06.13 |
---|---|
[BOJ, 백준] 2143 두 배열의 합 python (0) | 2024.06.05 |
[BOJ] 백준 1709 타일 위의 원 python (0) | 2024.06.02 |
[BOJ] 백준 16234 인구이동 python (0) | 2024.05.29 |
[BOJ] 백준 11725 트리의 부모 찾기 python (0) | 2024.05.18 |