Study/코딩테스트 연습

다음 큰 숫자

soyeonland 2024. 6. 24. 22:47

 

1. 2진수를 코딩으로 표현할 수 있는지

(몫이 0 이 될때 까지 나누기, 몫이 0이 됐을 때 나머지들 나열하면 이진수)

https://ko.wikihow.com/%EC%8B%AD%EC%A7%84%EC%88%98%EB%A5%BC-%EC%9D%B4%EC%A7%84%EC%88%98%EB%A1%9C-%EB%B0%94%EA%BE%B8%EB%8A%94-%EB%B2%95

 

십진수를 이진수로 바꾸는 법: 10 단계 (이미지 포함) - wikiHow

십진수에는 각 자리마다 열 가지 가능한 값(0,1,2,3,4,5,5,6,7,8,9)들이 존재합니다. 반대로, 이진수(2를 기저로 하는)는 각 자릿수에 올 수 있는 값이 단 두 가지로, 이는 0 또는 1입니다. 이진법은 전자

ko.wikihow.com

 

2. 주의점:

몫과 나머지가 계속 바뀌는데, 서로 순서 주의해야함.

def cal_binary(n):
    
    binary = []
    cnt = 0

    share = n//2
    remainder = n%2
    binary.append(remainder) # 순서 거꾸로 바꿔야됨
    if remainder==1:
        cnt +=1
    
    while(share>0):
        binary.append(share%2)
        if (share%2)==1:
            cnt +=1

        share = share//2        
    
    return cnt, binary

def solution(n):
    cnt, binary = cal_binary(n)
    
    #find = False
    #print('cnt', cnt)
#print('cnt', cnt, 'binary', binary)
    while (1):
        n += 1
        new_cnt, _ = cal_binary(n)
        print('n',n,'new_cnt',new_cnt)
        if new_cnt == cnt:
            answer = n
            break
    
    return answer