프로그래머스/2단계

다음 큰 숫자

js0616 2024. 4. 30. 21:43

 

2진법 기준 1의 갯수가 같으면서 , 해당 숫자보다 큰 숫자중,  가장 작은 숫자를 구하는 문제

 

78 : 1001110 // 4개

79 : 1001111 // 5개

80 : 1010000 // 2개

81 : 1010001 // 3개

82 : 1010010 // 3개

83 : 1010011 // 4개

84 : 1010100 // 3개

85 : 1010101 // 4개

86 : 1010110 // 4개

87 : 1010111 // 5개

88 : 1011000 // 3개

89 : 1011001 // 4개

90 : 1011010 // 4개

 

78 -> 83 -> 85 -> 86 -> 89 -> 90 .. ??? 모르겠다

 

 

 

10진수를 2진수로 변환하였을때 1의 갯수를 새는 함수 num2_count1 를 정의하고

 

받은 숫자를 1씩 증가하며 1의 갯수를 비교해보았다. 

 

 

def num2_count1(n):
    count = 0
    while n > 0 :
        if n % 2 == 1 :
            count += 1
        n = n//2
    return count

def solution(n):
    target = num2_count1(n)
    i = 0
    while 1:
        i += 1
        if target == num2_count1(n+i) :
            return n+i