짝수는 무조건 뒤의 수가 0이다.
그렇기 때문에 1을 증가 시켜도 서로 비트가 1개밖에 차이가 나지 않아서 +1 한 수가 정답이다.
홀수는?
예를 들면 10001111이 있다고 치자
그렇다면 1을 증가시키면 10010000으로 엄청 달라지게 된다.
그래서 가장 나중에 나오는 0을 찾는다.
그리고 그 뒤에는 무조건 1이 나오기 때문에 01을 10으로 바꾸어 준다.
그렇게 되면 다른 비트 수의 차이가 2이하이면서 가장 최소의 숫자가 나오게 된다.
def solution(numbers):
answer = []
for i in numbers:
if i % 2 == 0:
answer.append(i + 1)
else:
a = str(format(i, 'b'))
zero_list = []
for j in range(len(a)):
if a[j] == "0":
zero_list.append(j)
if not zero_list:
ans = "10" + a[1:]
answer.append(int(ans, 2))
else:
ans = a[:zero_list[-1]] + "10"
if len(a) > zero_list[-1] + 2:
ans += a[zero_list[-1] + 2 :]
answer.append(int(ans, 2))
return answer