문제 설명
자연수 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 result78 | 83 |
15 | 23 |
문제풀이
1. 문제에서 설명한 대로, 먼저 2진수로 변환을 시키고 1의 등장 횟수를 세어본다.
2. 주어진 n을 while문을 이용하여 1씩 더하고, 2진수로 변환 시킨 후 1의 등장 횟수를 세어본다.
3. 최초로 주어진 n의 1의 등장횟수와 1씩 더해가며 1의 등장 횟수를 계산한 것을 비교 한 후,
비교 값이 같다면 해당 숫자를 반환한다.
# 주어진 숫자를 2진수로 변환한 후, 숫자 1 개수 세기
def ezin_one(s):
to_ezin = ''
while s != 0:
to_ezin += str(s%2)
s = s // 2
return to_ezin.count('1')
def solution(n):
one_count = ezin_one(n)
one_count2 = 0
while one_count != one_count2:
n += 1
one_count2 = ezin_one(n)
answer = n
return answer
보니까 2진수를 변환시켜주는 함수 bin() 이 존재했는데, 나는 별도의 함수로 설정하여 풀이하였다! 그래도 기존에 함수가 존재한다면 이를 활용해서 푸는것이 현명한 것 같다!
'Coding Test Practice > 프로그래머스' 카테고리의 다른 글
프로그래머스, [1차] 캐시, python, 파이썬 (0) | 2022.10.21 |
---|---|
프로그래머스 Level2, 점프와 순간 이동, python (0) | 2022.10.18 |
프로그래머스 올바른 괄호 python (0) | 2022.09.14 |
프로그래머스 level 2, JadenCase 문자열 만들기, python (0) | 2022.07.25 |
프로그래머스 Level2, N개의 최소 공배수 (0) | 2022.07.19 |