프로그래머스 – 다음 큰 숫자 문제 Python

프로그래머스 문제풀이

문제

문제설명

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.

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

예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.

자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

제한사항

  • n은 1,000,000 이하의 자연수 입니다.

입출력 예

nresult
7883
1523

입출력 예 설명

입출력 예#1
문제 예시와 같습니다.
입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.

문제해석과정

  1. 문제에서 주어진 조건 3가지를 만족하는 값을 찾자.
  2. N보다 크고, N의 2진수와 1의 갯수가 같은 것 중 가장 작은 자연수를 찾는다.

위 같은 문제 및 제한사항을 해석하고 문제풀이를 시작하면 됩니다.

나의 풀이

이번 문제는 bin함수count함수만 알면 쉽게 해결할 수 있다. 모르신다면 2의 진수를 일일이 구해서 1을 따로 카운트하는 코드도 구현해야 할 것이다.

N보다 큰 수여야 하기 때문에 N+1의 값부터 1씩 더해가며, 2진수시 1의 갯수를 확인하도록 반복문을 무한히 반복하도록 설계한다.

1의 갯수가 N과 동일하다면 무한 반복문을 정지하고 탈출하면 된다.

def solution(n):
    answer = n
    onecnt = bin(n).count('1')              # N의 2의진수의 1의 갯수

    while True:                             # 무한반복
        answer += 1
        answercnt = bin(answer).count('1')
        if answercnt == onecnt:
            break
    return answer

다른 사람의 풀이

이번 문제는 다른 풀이들이 저와 유사해서 가져오지 않았습니다.

관련 링크

문제해결과정에서 기초가 부족하다고 느껴지시면 아래 정리 글을 참고해주세요.


Leave a Comment