세용용용용 2023. 5. 16. 19:33

나의 코드

#이진수로 만듬
def bit(n):
    bit=''
    while True:
        bit+=str(n%2)
        n=n//2
        if n==0:
            break
    bit = bit[::-1]
    return bit
#비트를 계속 비교해가면서 다른 비트 개수가 2개이하면
#whlie break 하고 그에따른 10진수 answer에 삽입
def solution(numbers):
    answer = []
    for i in numbers:
        first_bit = bit(i)
       
        while True:
            i+=1
            other_dit = bit(i)
            other_count = 0
           
            for j in range(-1,-(len(first_bit)+1),-1):
                if first_bit[j] != other_dit[j]:
                    other_count+=1
            other_count += len(other_dit) - len(first_bit)
           
            if other_count <= 2:
                answer.append(i)
                break
    #print(answer)  
    return answer
solution([2,7])

결과... 뭐가 단단히 잘못됨 ㅋㅋㅋㅋ..... 뭐가 문제지 ㅠㅠㅠㅠ 결국 검색해봄

진짜 대단한 사람들 많은거같다 

1) 짝수일경우 맨뒤에가 항상 0 즉, 맨뒤에만 1로바뀌므로 바로 다음 십진수가 2개이하임(100=1100100, 101=1100101)

2) 홀수일경우 맨뒤에가 항상 1로 끝날것, 다음 비트가 0이면 1로바꾸고 아니면 그 다음 비트를 보면됨

즉, 오른쪽부터  0이 언제나오는지 보고 이것을 1로 바꾸면 된다 . 그후 1로바꾼 자리다음(오른쪽)에 있는 1을 0으로 바꾸면 됨(9=1001, 1010 = 10이됨)

 

코드구현

#이진수로 만듬
def bit(n):
    bit=''
    while True:
        bit+=str(n%2)
        n=n//2
        if n==0:
            break
    bit = bit[::-1]
    return bit

def solution(numbers):
    answer = []
    for i in numbers:
        if i%2==0:
            answer.append(i+1)
            continue

        bin_num = '0'+bit(i)
        #print(bin_num)
        bin_num = bin_num[:bin_num.rindex('0')] + '10' + bin_num[bin_num.rindex('0')+2:]
        answer.append(int(bin_num,2))
        #print(answer)
    return answer
solution([2,7])

느낀점 : 아직 많이 부족하다...