[ Programmers / CodingTest / Python ] 다음 큰 숫자

문제 설명

자연수 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)입니다.

접근 방법

이 문제를 처음 접했을 때 접근 방법에 대해 굉장히 막막했다. 그래서 이진수로 변환하였을 때 다음 큰 수로 변하는 이진수의 배열의 패턴을 분석하려고 노력을 많이 하였다. 그러나 이 과정속에서 잘못되고 있다는 느낌을 계속해서 받았고 간단하게 생각해보기로 했다.

n을 1씩 증가시켜가며 n에 대한 이진수를 구하고 초기 n의 이진수에 포함된 1의 개수와 현재 n의 이진수에 포함된 1의 개수가 같을 경우 반복을 멈추고 n을 값으로 취하도록 접근하였고 테스트를 통과할 수 있었다.

  • n을 이진수로 바꾼 후 앞의 0x를 뺀 문자열을 변수 nb에 저장한다.
  • nb에 포함된 1의 개수를 세어 one 변수에 저장한다.
  • while문을 돌린다.
    -> n을 1 증가시킨다.
    -> n을 이진수로 변환한 후 앞의 0x를 뺀 문자열에 포함된 1의 개수가 one과 같다면 반복문을 탈출한다.
  • n을 반환한다.

solution.py

def solution(n):
    nb=bin(n)[2:]
    one=nb.count('1')
    while True:
        n+=1
        if bin(n)[2:].count('1')==one:
            break
    return n

좋은 웹페이지 즐겨찾기