[Programmers] 다음 큰 숫자(Python)

유병주·2023년 6월 26일
0
post-thumbnail

[Programmers Lv.2] 다음 큰 숫자
문제를 풀어보려 한다.

[문제]

자연수 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 이하의 자연수 입니다.

[문제 풀이]

처음에는 숫자의 규칙성 또는 shift 연산을 통해 문제를 푸려보려 하였지만 쉽게 해답이 보이지 않았다.
그래서 어렵게 생각하지 않고, 문제 설명을 있는 그대로 해석해보았다.

주어진 10진수 숫자를 2진수로 변환하여, 1의 개수를 count할 수 있다.
이는 python 내의 bin()과 count() 내장 함수를 통해 알아낼 수 있다.

n+1 부터 반복문을 수행할 때 bin() 함수와 count()함수를 사용하여, 입력으로 주어진 입력값 n과 이진수 변환 시 1의 개수가 같은지 확인하면 된다.

def solution(n):
    answer = 0
    count1 = bin(n).count("1")

    for i in range(n+1, 1000001):
        count2 = bin(i).count("1")

        if count1 == count2:
            answer = i
            return answer
    return answer

느낀 점

시간 효율성을 위해 최적의 해답을 찾으려 할 때가 많지만, 첫 시도는 문제의 뜻을 잘 해석하고 문제를 코드로 풀어쓸 줄 알아야한다는 것!!

profile
데이터분석&엔지니어링이 가능한 AI 서비스 개발자를 꿈꿉니다:)

0개의 댓글