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

최더디·2021년 2월 1일
0
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 이하의 자연수 입니다.

입출력 예

nresult
7883
1523

입출력 예 설명
입출력 예#1
문제 예시와 같습니다.

입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.


💻 문제 풀이

def solution(n):
    cnt = bin(n).count('1')             # bin()과 count()를 사용해 2진수 변환 후 1의 개수 카운팅
    while True:
        n += 1                          
        if cnt == bin(n).count('1'):    # n을 +1하면서 2진수 1의 개수를 카운팅 후, cnt와 비교
            break
    
    return n

1) 중요 포인트

  • bin()을 사용하여 2진수로 만들기
  • count()를 사용하여 문자열에서의 '1' 개수 카운팅

2) 2진수(bin), 8진수(oct), 16진수(hex)

  • 2진수bin() : , 0b로 표현
  • 8진수 oct(): , 0o로 표현
  • 16진수 hex(): , 0x로 표현

2-1) 10진수 숫자를 2진수, 8진수, 16진수로 만들기

#return type == str
print(bin(72))      #result : '0b1001000'
print(oct(72))      #result : '0o110'
print(hex(72))      #result : '0x48'

2-2) int()를 통해 다시 숫자로 변환
int()의 2번째 인자 default값은 10이기 때문에 int(12.3, 10) 하면 12가 나오는 것이다.

"""
1) 진수로 표현된 str을 다시 숫자로 만들고 싶을 때 int() 사용
2) 2번째 인자로 진수의 base값을 넘겨주면 됨
"""
print(int('0b1001000', 2))  #result : 72
print(int('0o110', 8))      #result : 72
print(int('0x48', 16))      #result : 72
profile
focus on why

0개의 댓글