algorithm

[프로그래머스 LV.2 다음 큰 숫자]

선호하는 2023. 11. 8. 09:00

문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/12911

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

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

 

<문제 풀이>
bin() 함수를 사용해서 n을 이진수로 변환한 뒤, 1의 수를 센다. 그 다음, n에 1을 계속 더해가면서 그 값을 이진수 변환하여 1의 수를 세고, 조건과 일치하는지 확인한 뒤 만약 아니라면 반복을, 맞다면 종료 후 그 값을 제출하면 된다.

bin() 함수처럼 다른 진수로 변환하는 함수의 종류는 다음과 같다.

  1. oct() 8진수 변환
  2. hex() 16진수 변환
    이 세 함수만 존재하는 이유는, 컴퓨터에서 예전부터 주로 사용되었기 때문이다. 2진법은 컴퓨터 메모리가 이진 형태로 저장되기 때문에, 8진수와 16진수는 다른 수들보다 2진수를 조금 더 간결하게 표현할 수 있기 때문에 살아남았다고 볼 수 있을 것이다.

<소스코드>

def solution(n):

    tmp = bin(n).count('1')
    while True:
        n += 1
        if tmp == bin(n).count('1'):
            break

    return n