LV 2: 다음 큰 숫자

ewillwin·2023년 8월 19일
0

문제 링크

LV 2: 다음 큰 숫자


구현 방식

  • 처음에 규칙을 찾아서 조건문 분기로 풀어보려 했으나, 쉽지 않았다

  • 이 문제는 그냥 1) 1의 개수가 이진수의 길이와 같은 경우(이진수가 모두 1로 이루어짐), 2) 1의 개수가 이진수의 길이와 같지 않은 경우(이진수가 0과 1로 이루어짐)로 나누어서 풀면 된다

    • 1)의 경우는 이진수 string에서, 두번째 인덱스의 위치에 0을 삽입해주면 된다
    • 2)의 경우는 n에 1을 더해주면서, 조건을 만족하는 가장 작은 수를 바로 return 해주면 된다

코드

def solution(n):
    bin_n = list(bin(n)[2:])
    one_cnt = bin_n.count('1')
    
    if one_cnt == len(bin_n):
        answer = [1] * (len(bin_n)+1); answer[1] = 0
        return int(''.join(map(str, answer)), 2)
    else:
        while True: #n에 1을 더해주면서 조건을 만족하는 가장 작은 수 출력
            n += 1
            if list(bin(n)[2:]).count('1') == one_cnt:
                return int(''.join(map(str, bin(n)[2:])), 2)
profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글