[프로그래머스/Lv2] 다음 큰 숫자
2022. 10. 13. 10:37
문제
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의한다.
1. n의 다음 큰 숫자는 n보다 큰 자연수
2. n의 다음 큰 숫자와 n은 이진수 변환했을 때 1의 개수가 같다.
3. n의 다음 큰 숫자는 조건 1, 2를 모두 만족하는 가장 작은 수이다.
자연수 n이 매개변수로 주어질 때 n의 다음 큰 숫자를 반환하는 함수를 만들어야 한다.
제한조건
1. n은 1000000이하의 자연수이다.
코드
def solution(n):
alpha = 1
check = True
while check:
if format(n, 'b').count('1') == format(n+alpha, 'b').count('1'):
check = False
else:
alpha += 1
return n+alpha
설명
무한반복을 통해서 문제에서 제시한 조건 1, 2를 만족하는 수를 찾을 때 까지 반복할 것이다.
alpha = 1
check = True
alpha는 n에 더할 수를 의미한다. 반복문이 돌아갈 때마다 1씩 증가시켜 준다.
check는 while 반복문의 동작을 관리하는 변수이다.
while check:
if format(n, 'b').count('1') == format(n+alpha, 'b').count('1'):
check = False
else:
alpha += 1
n의 이진수 표현과 n+alpha의 이진수 표현에서 1의 개수가 같으면 check를 False로 변경하여 무한반복을 멈춘다.
같지 않다면 alpha를 1 증가시킨다.
return n+alpha
반복문이 종료되면 n과 alpha를 더해 반환한다.
'코딩테스트 > 연습문제' 카테고리의 다른 글
[프로그래머스/Lv2] 짝지어 제거하기 (0) | 2022.10.18 |
---|---|
[프로그래머스/Lv2] 카펫 (0) | 2022.10.14 |
[프로그래머스/Lv2] 피보나치 수 (0) | 2022.10.13 |
[프로그래머스/Lv2] 숫자의 표현 (0) | 2022.10.12 |
[프로그래머스/Lv2] 올바른 괄호 (0) | 2022.10.12 |