Coding Test/programmers

[Python] 파이썬 프로그래머스 다음 큰 숫자

파송송 2022. 10. 13. 19:38
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/12911

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


나의 풀이

  • 3단계로 나누어서 생각함

1. 맨 앞의 1을 10으로 바꾸고 나머지를 sort

2. 0, 1의 위치를 바꾸고 나머지 sort

2. 0, 1의 위치 바꾸기

def solution(n):
    bin_n = list(bin(n)[2:])
    len_n = len(bin_n)


    for i in range(len_n-1, 0, -1):
        if bin_n[i] == '1' and bin_n[i-1] == '0':
            if i == len_n - 1:
                bin_n[i], bin_n[i-1] = bin_n[i-1], bin_n[i]
                answer = '0b'+''.join(bin_n)
                return int(answer,2)
            else:
                bin_n[i], bin_n[i-1] = bin_n[i-1], bin_n[i]
                answer = '0b'+''.join(bin_n[:i] + sorted(bin_n[i:]))
                return int(answer,2)

        elif i == 1:
            answer = '0b'+''.join(['1','0'] + sorted(bin_n[i:]))
            return int(answer,2)
    return 0

다른 사람 풀이

  • n에서 1씩 더해서 1의 개수 비교
def nextBigNumber(n):
    num1 = bin(n).count('1')
    while True:
        n = n + 1
        if num1 == bin(n).count('1'):
            break
    return n

현재는 효율성 검사 2번에 걸린다고 함

 

728x90