Coding Test/programmers

lv.2 다음 큰 숫자

210B 2023. 9. 1. 18:00

 

1의 갯수가 동일해야 한다는 점에 착안해서 수학적으로 풀어봤다.

def solution(n):
    b = bin(n).replace('0b', '0')
    m = b.rfind('01')
    k = b[m+2:].count('1')
    b = b[:m] + '10' + '0'*(len(b)-m-2-k) + '1'*k
    answer = int(b, 2)
    return answer

 

programmers solution

def nextBigNumber(n):
    one_count = bin(n).count('1')

    for compare_num in range(n+1, 2*n+1):
        if bin(compare_num).count('1') == one_count:
            break

    return compare_num

복잡도가 안좋다고는 하는데,, 내 풀이는 슬라이싱을 쓰고 있어서 딱히.. 낫다고 할 수 없는 듯