def solution(numbers):
answer = []
for number in numbers:
bit = str(bin(number))[2:]
zero = len(bit)-bit.rfind('0')-1 if bit.rfind('0') != -1 else len(bit)
if zero <= 1:
answer.append(number + 1)
else:
tmp = '1' + '0'* (zero - 1)
answer.append(number + int(tmp, 2))
return answer
특별히 사용한 알고리즘은 없고 bit의 규칙을 찾아서 해결한 문제
처음에 0의 뒤에서 부터의 위치를 찾는다. 만약 0이 없다면 bit로 변환한 수 앞에 0이 있다고 생각한다.
만약 111 이라면 0111로 0의 위치는 3으로 생각하고
10 이라면 0의 위치는 0으로 생각한다.
0의 위치가 뒤에서 부터 0, 1 인덱스에 위치한다면 그 숫자에 1만 더해도 1개 이상 다르기 때문에 그 값이 정답이다
그렇치 않은 경우에는 현재 0의 뒤에서 부터의 위치를 1로 바꾸고 그 다음 인덱스를 0으로 바꾸면된다
tmp = '1' + '0'* (zero - 1) 이 식을 통해 해당 과정 수행
뒤로부터 처음 위치의 0의 인덱스 자리 전 자리에 1을 더해주는 방식이다.