본문 바로가기
알고리즘/프로그래머스 PS

[프로그래머스][Level 2][Python] 다음 큰 숫자

by 빛밤하늘 2021. 7. 17.
반응형

밑의 링크는 프로그래머스에서의 문제 링크입니다.

 

코딩테스트 연습 - 다음 큰 숫자

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니

programmers.co.kr

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# 자연수 n이 매개변수로 주어집니다.
# n은 1,000,000 이하의 자연수입니다.
def solution(n):
    # n을 2진수로 바꿨을 때, 1의 개수를 저장하는 변수를 선언합니다.
    bin_n_one_cnt = bin(n).count('1')

    # 다음 큰 숫자를 찾을 때까지 반복합니다.
    while True:
        # n에 1을 더합니다.
        n += 1

        # 현재 n을 2진수로 바꿨을 때의 1의 개수가 
        # 처음 n을 2진수로 바꿨을 때의 1의 개수와 같다면
        if bin(n).count('1') == bin_n_one_cnt:
            # 현재 n을 반환합니다.
            return n

결과

 

다음 큰 숫자를 쉽게 구하기 위해

맨 처음 n을 2진수로 바꿨을 때의 1의 개수와

다음 큰 숫자를 2진수로 바꿨을 때의 1의 개수 사이에서 뭔가 특정한 패턴이 있는지 생각해봤는데

바로 떠오르는 패턴을 찾지 못했습니다.

 

그래서 위의 코드처럼 그냥 n에서부터 1을 계속 더해가면서 2진수에서 1의 개수를 찾아 비교하는 코드를 짰는데

다른 고수분들의 코드들 중에서 더 쉽게 짠 코드가 있는지도 찾아봐야겠습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글