[프로그래머스 LV2] 다음 큰 숫자

Junyoung Park·2021년 12월 23일
0

코딩테스트

목록 보기
14/631

1. 문제 설명

다음 큰 숫자

2. 문제 분석

크게 두 단계로 나뉜다. 주어진 n을 이진수로 변환하기. n+1의 이진수를 확인하기. 후자를 구할 때 n에서와 동일한 방법을 선택했다가 시간 초과가 떴는데, 이를 방지하기 위해 n의 이진수 n_bin을 통해 1(=2의 0승)의 자리수를 확인해 n+1 이진수를 반환하는 함수를 만들었다.

3. 나의 풀이

def get_bin(n):
    
    power_n = 1
    while 2**power_n < n: 
        power_n += 1

    n_bin = ''
    
    for i in range(power_n-1, -1, -1):
        if n >= 2**i:
            n -= 2**i
            n_bin += '1'
        else:
            n_bin += '0'
            
    return n_bin

def get_next_bin(n_bin):
    if n_bin[-1] == '0':
        n_bin = n_bin[:-1] + '1'
    else:
        n_bin = '0' + n_bin
        zero_idx = n_bin.rfind('0')
        n_bin = n_bin[:zero_idx] + '1' + '0' * len(n_bin[zero_idx+1:])
        if n_bin[0] == '0': n_bin = n_bin[1:]
    return n_bin

def solution(n):
    n_bin = get_bin(n)
    ones_n = len([x for x in n_bin if x == '1'])
    next_n = n + 1
    
    while(True):
        next_bin = get_next_bin(n_bin)
        ones_next = len([x for x in next_bin if x == '1'])
        if ones_next == ones_n:
            return next_n
        n_bin = next_bin
        next_n += 1
        
profile
JUST DO IT

0개의 댓글