2단계_다음 큰 숫자

파송송계란빡 ㅣ 2021. 12. 29. 12:49

문제 설명

자연수 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
78 83
15 23
입출력 예 설명

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

 

풀이

 - while 반복문을 통해 i(n보다 큰 값)을 증가시키면서 1의 개수를 찾는다.

 - 1의 개수가 같은 경우 i 반환

 - 1의 개수가 같지 않은 경우 i를 1씩 증가시키면서 1의개수가 같을때까지 i를 증가시키면서 찾는다.

def convert_num(n, q) :                 #n의 숫자를 q진수로 변환 함수
    rev_base = ''
    while n > 0 :                       #변환 시작
        n, mod = divmod(n, q)
        rev_base += str(mod)            #거꾸로 출력
    return rev_base[::-1]

def solution(n):
    answer = 0
    standard_n = convert_num(n, 2)
    standard_count = str(standard_n).count("1")
    i = n + 1                               #i는 n의 다음 큰 숫자는 n보다 큰 자연수
    while True :
        check_num = convert_num(i, 2)       #n다음 수 i를 2진수로 변환
        num_count = str(check_num).count("1")   #1의 개수 카운트
        if standard_count == num_count :    #1의 개수가 같은 경우
            return i                        #i를 리턴
        else :
            i += 1                          #1의 개수가 같지 않은 경우 i를 증가시켜 숫자 증가

'코테풀이 > 프로그래머스' 카테고리의 다른 글

2단계_이진 변환 반복하기  (0) 2021.12.29
2단계_피보나치 수  (0) 2021.12.29
2단계_JadenCase 문자열 만들기(대소문자 변경)  (0) 2021.12.29
2단계_짝지어 제거하기  (0) 2021.12.27
2단계_H-Index  (0) 2021.12.27
2단계_다음 큰 숫자