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

jun17114·2020년 12월 4일
1

[프로그래머스]

목록 보기
5/8
post-thumbnail

문제 설명

자연수 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
15(1111)의 다음 큰 숫자는 23(10111)입니다.


나의 풀이

def solution(n):
    answer = n
    temp = (format(n,'b')).count('1')
    while True:
        answer +=1
        if (format(answer,'b')).count('1') == temp:
            break
            
    return answer

풀이를 보시면 formatcount라는 함수가 쓰여졌습니다. 이 두 함수가 풀이의 핵심으로 format10진수의 수를 2진수로 바꾸어줍니다. format(n,'b')'b'Binary를 뜻합니다.

count는 Python에서 문자열에서 부분 문자열의 개수를 세는 메소드입니다. 여기서 count2진수로 변환된 n1의 개수를 세서 반환합니다.

그렇게 해서 변수 temp에는 n1의 개수가 저장되게 됩니다.

while True:는 다음 큰 숫자를 찾을 때까지 무한히 반복합니다. 뒤에 나오는 if문은 answer1의 개수와 temp를 비교해서 찾으면 break를 통해 반복문을 탈출합니다.


0개의 댓글