Coding Test Practice/프로그래머스

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

still..epochs 2022. 9. 19. 23:44

문제 설명

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

입출력 예

n                  result
78 83
15 23

 

문제풀이

1. 문제에서 설명한 대로, 먼저 2진수로 변환을 시키고 1의 등장 횟수를 세어본다.
2. 주어진 n을 while문을 이용하여 1씩 더하고, 2진수로 변환 시킨 후 1의 등장 횟수를 세어본다.

3. 최초로 주어진 n의 1의 등장횟수와 1씩 더해가며 1의 등장 횟수를 계산한 것을 비교 한 후,
    비교 값이 같다면 해당 숫자를 반환한다.

# 주어진 숫자를 2진수로 변환한 후, 숫자 1 개수 세기
def ezin_one(s):
    to_ezin = ''
    
    while s != 0:
        to_ezin += str(s%2)
        s = s // 2
    
    return to_ezin.count('1')


def solution(n):
    one_count = ezin_one(n)
    
    one_count2 = 0
    while one_count != one_count2:
        n += 1
        one_count2 = ezin_one(n)
        
    answer = n
    
    return answer

 

보니까 2진수를 변환시켜주는 함수 bin() 이 존재했는데, 나는 별도의 함수로 설정하여 풀이하였다! 그래도 기존에 함수가 존재한다면 이를 활용해서 푸는것이 현명한 것 같다!