다음 큰 숫자
풀이
조건이 3개가 있다.
- n의 다음 큰 숫자는 n보다 큰 자연수입니다.
- n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 개수가 같습니다.
- n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수입니다.
몇 가지 방법을 생각해 봤지만, 제한 사항에 n <= 1,000,000의 자연수라곤 하지만 아무래도 while문을 이용해서 하는 것이 더 맞는 방법이라 생각해, while문을 이용했고, 2진수와 1의 개수를 판단해야 하기에, 10진수를 2진수로 변환해 주는 bin()을 사용하고 count()를 이용하여 n의 2진수 값이 가진 1의 개수와 n+x의 2진수 값이 가진 1의 개수가 같으면 바로 return 하는 방식을 사용했다.
# 우선 n보다 큰 수를 2진수로 변환시킨 뒤, 1의 갯수가 n과 같으면 그 수가 n의 다음 큰 수가 됨
def solution(n):
i = n + 1
n_one = bin(n)[2:].count('1')
while i:
one_count = bin(i)[2:].count('1')
if n_one ==one_count:
return i
else:
i += 1
다른 사람 풀이
간단한 문제여서 다른 사람 풀이도 별반 다르지 않았다.
def nextBigNumber(n):
one_count = bin(n).count('1')
for compare_num in range(n+1, 1000001):
if bin(compare_num).count('1') == one_count:
break
return compare_num
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv1 개인정보 수집 유효기간(python) (1) | 2024.01.29 |
---|---|
프로그래머스 Lv1 문자열 내림차순으로 배치하기(python) (0) | 2024.01.29 |
프로그래머스 Lv1 같은 숫자는 싫어(python) (0) | 2024.01.29 |
프로그래머스 Lv1 추억 점수(python) (0) | 2024.01.29 |
프로그래머스 Lv1 크기가 작은 부분 문자열 (python) (0) | 2024.01.29 |