728x90
https://school.programmers.co.kr/learn/courses/30/lessons/77885
분석
x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수
- 숫자가 짝수인 경우
- 항상 가장 마지막 비트는 0이다. 따라서 마지막 비트를 0에서 1로 바꿔준 값이 답이기 때문에 숫자+1 값을 answer에 넣어준다.
- 숫자가 홀수인 경우
- 가장 뒤쪽에 있는 0을 1로 바꿔주고 그다음 비트를 0으로 바꿔주면 된다.
- 예를 들어 7(0111) 은 가장 뒤쪽에 있는 0을 1로 바꿔주고 그다음 비트를 0으로 바꿔준다. 즉, 11(1011)이 답이다.
- 그리고 9(1001) 은 1001 -> 1011 -> 1010 으로 10이 답이다.
f(7) = 11
7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문
수 비트 다른 비트의 개수 7 000...0111 8 000...1000 4 9 000...1001 3 10 000...1010 3 11 000...1011 2
풀이
def solution(numbers):
answer = []
for x in numbers:
if x%2==0: # 짝수
answer.append(x+1)
else: # 홀수
b='0'+bin(x)[2:]
# 가장 뒤쪽에 있는 0을 1로 바꿔주고 그다음 비트를 0으로 바꿔주면 된다
b=b[:b.rindex('0')]+'10'+b[b.rindex('0')+2:]
answer.append(int(b, 2))
return answer
월간코드챌린지
728x90