[프로그래머스 Lv2.] 다음 큰 수

bee·2023년 4월 12일
0

코딩테스트

목록 보기
3/16
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 이하의 자연수 입니다.




💡 풀이 아이디어
1) 입력받은 수 num을 2진수 변환한 문자열 중 1의 개수 세기
2) num에 1씩 더해가면서 해당 수를 2진수로 변환했을 때 1의 개수가 다르면 +1 후 반복문 처음으로 돌아가기
3) 1의 개수가 같으면 break


## 내 풀이
def solution(num):
    res = num + 1 # 찾고자 하는 '다음 큰 수'
    
    num_bin = format(num, 'b') # 입력받은 num을 2진수 변환
    one_num = num_bin.count('1') # 2진수 num에서 1의 개수
    
    while True:
        res_bin = format(res, 'b')
        one_bin = res_bin.count('1')
        
        # '다음 큰 수' 찾은 경우 => 반복문 탈출
        if one_num == one_bin:
            break
        
        # '다음 큰 수' 못찾은 경우
        res += 1
    
    return res

# 테스트용 코드
print(solution(15))

78
23





## 다른 사람 풀이
profile
벌집처럼 밀도있게 차곡차곡 쌓아나가는중

0개의 댓글