PS/이분 탐색

[프로그래머스] No.150367 표현 가능한 이진트리 完

_빌런 2023. 9. 29. 17:40
def solution(numbers):
    def proof(num):
        bnum = bin(num)[2:]
        len_bin = len(bin(num)[2:])
        next_squ2minus1 = (1 << (len(bin(len_bin)[2:]))) - 1

        fill = bnum.zfill(next_squ2minus1)
        
        for idx, val in enumerate(fill, 1):
            if idx % 2 == 0 and val == "0":
                half = (idx & (-idx)) // 2
                bef_idx = idx - half - 1
                aft_idx = idx + half - 1
                
                if int(fill[bef_idx]) + int(fill[aft_idx]):
                    return 0 
                
        return 1
    
    answer = []
    for num in numbers:
        answer.append(proof(num))
        
    return answer