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

프로그래머스 Lv2 다음 큰 숫자(python)

by 개발하는 호랑이 2024. 1. 29.

다음 큰 숫자

풀이

조건이 3개가 있다.

 

  1. n의 다음 큰 숫자는 n보다 큰 자연수입니다.
  2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 개수가 같습니다.
  3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수입니다.

몇 가지 방법을 생각해 봤지만, 제한 사항에 n <= 1,000,000의 자연수라곤 하지만 아무래도 while문을 이용해서 하는 것이 더 맞는 방법이라 생각해, while문을 이용했고, 2진수와 1의 개수를 판단해야 하기에, 10진수를 2진수로 변환해 주는 bin()을 사용하고 count()를 이용하여 n의 2진수 값이 가진 1의 개수와 n+x의 2진수 값이 가진 1의 개수가 같으면 바로 return 하는 방식을 사용했다.

# 우선 n보다 큰 수를 2진수로 변환시킨 뒤, 1의 갯수가 n과 같으면 그 수가 n의 다음 큰 수가 됨
def solution(n):
    i = n + 1
    n_one = bin(n)[2:].count('1')
    while i:
        one_count = bin(i)[2:].count('1')
        if n_one ==one_count:
            return i
        else:
            i += 1

다른 사람 풀이

간단한 문제여서 다른 사람 풀이도 별반 다르지 않았다.

def nextBigNumber(n):
    one_count = bin(n).count('1')

    for compare_num in range(n+1, 1000001):
        if bin(compare_num).count('1') == one_count:
            break

    return compare_num