Haribo ML, AI, MATH, Algorithm

다음 큰 숫자

2021-01-20
Haribo

코드

def solution(n = 78):
    b = bin(n)[2:]
    if (index := b.rfind('01')) != -1 :
        b = b[:index] + '10' + b[index+2:][::-1]
    else :
        b = b[0]+'0'+ b[1:][::-1]
    return int(b, 2)

패턴 파악하기

자연수를 이진수로 변경

1 -> 1
2 -> 10
3 -> 11
4 -> 100
5 -> 101
6 -> 110
7 -> 111
8 -> 1000
9 -> 1001
10 -> 1010
11 -> 1011
12 -> 1100
13 -> 1101
14 -> 1110
15 -> 1111
16 -> 10000
17 -> 10001
18 -> 10010
19 -> 10011
20 -> 10100

조건에 맞는 다음 큰 수와의 비교

1 | 10
10 | 100
11 | 101
100 | 1000
101 | 110
110 | 1001
111 | 1011
1000 | 10000
1001 | 1010
1010 | 1100
1011 | 1101
1100 | 10001
1101 | 1110
1110 | 10011
1111 | 10111
10000 | 100000
10001 | 10010
10010 | 10100
10011 | 10101
10100 | 11000
1001110 | 1010011 (78, 83)

패턴은 2가지로 요약됨.

case1 : 1이 연속적으로 나옴 ex) 1111000, 1111, 10000

case2 : 1 사이에 0이 있음 ex) 100001, 1110010, 10010010

case1 의 경우엔 제일앞의 1뒤에 0을 붙이고 그 나머지 숫자는 뒤집혀짐.

10000 -> 100000
111 -> 1011
1110 -> 10011

case2의 경우엔 제일 오른쪽 01을 뒤집고 그 뒤에 숫자들이 뒤집혀짐.

10001 - > 10010
110010 -> 110100
1001110 -> 1010011


Similar Posts

다음 포스트 땅따먹기

Comments