[PS, Algorithm] - 다음 큰 숫자 (코딩테스트 연습, LEVEL 2)

조재현·2022년 12월 12일
0

📒문제


🎈풀이

def solution(n):
    num = 0
    nToBin = bin(n)
    
    for i in range(2, len(nToBin)):
        if nToBin[i] == '1' : num+=1 
        
    result = n+1
    result_num = 0
    while True:
        tmp = bin(result)
        for i in range(2, len(tmp)):
            if tmp[i] == '1' : result_num+=1 
        
        if result_num == num: return result
    
        result+=1
        result_num = 0

그냥 이진수로 바꾸고 1의 개수를 구해서 이진수로 바꿨을 때 1의 개수가 같은 수를 while문을 돌려 찾아주었다.

코드가 조금 난잡하다고 생각했는데, 역시 함수를 몰라 코드가 난잡해질 수 밖에 없었다.

count함수를 쓰면 for문을 돌며 갯수를 구하지 않더라도 쉽게 개수를 셀 수 있다.

따라서 1의 개수를 for문을 돌며 구하는 이 코드 대신

for i in range(2, len(tmp)):
	if tmp[i] == '1' : result_num+=1 

count함수를 통해 쉽게 변경해 줄 수 있다.

	result_num = bin(n).count("1")

따라서 count를 쓴 새로운 코드는 다음과 같다. 코드가 훨씬 간단해진 것을 볼 수 있다.

def solution(n):
    result = 0
    num = bin(n).count("1")
    
    t = n+1
    
    while True:
        result = bin(t).count("1")
        if result == num: return t
    
        t+=1
    
profile
꿈이 많은 개발자 지망생

0개의 댓글