728x90
https://school.programmers.co.kr/learn/courses/30/lessons/12911
나의 풀이
- 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
'Coding Test > programmers' 카테고리의 다른 글
[Python] 파이썬 프로그래머스 영어 끝말잇기 (1) | 2022.10.14 |
---|---|
[Python] 파이썬 프로그래머스 카펫 (0) | 2022.10.14 |
[Python] 파이썬 프로그래머스 피보나치 수열 (0) | 2022.10.11 |
[Python] 파이썬 프로그래머스 숫자의 표현 (0) | 2022.10.10 |
[Python] 파이썬 프로그래머스 최솟값 만들기 (0) | 2022.10.06 |