1def solution(numbers):
2 answer = []
3 for number in numbers:
4 num = list(str(bin(number)).split('b')[1])
5
6 # 첫번째 자릿수가 0인 경우
7 if num[-1] == '0':
8 num[-1] = '1'
9 answer.append(int('0b'+''.join(num), 2))
10 continue
11
12 # 첫번째 자릿수가 1인 경우
13 num = ['0']+num
14 # 두번째 자리부터 순회
15 for i in range(len(num)-2, -1, -1):
16 # 가장 오른쪽의 0을 찾았을 때
17 if num[i] == '0':
18 # 0을 오른쪽으로, 1을 왼쪽으로 옮긴다
19 num[i], num[i+1] = num[i+1], num[i]
20 answer.append(int('0b'+''.join(num), 2))
21 break
22
23 return answer
문제
- 양의 정수 x에 대해서 “x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수"를 구하라
- TC
- input
[2, 7]
- ouput
[3, 11]
- input
해결방법
- 2가지 경우로 풀었다,
- 첫번째 자릿수가 0인 경우 -> 첫번째 자릿수 1로 바꾼다
- 첫번째 자릿수가 1인 경우 -> 가장 오른쪽의 0을 오른쪽으로 한 칸 옮긴다