안녕하세요 !
https://programmers.co.kr/learn/courses/30/lessons/77885
풀이
문제 예시를 잘보면! 답을 쉽게 구할 수 있습니다.
1) 짝수의 경우
만약, 4라면 이진수로100
입니다. 4보다 크면서 2개 이하로 다른 수를 찾으면101
입니다.
즉, 가장 뒤에 있는 0을 1로 바꿔주면 됩니다.2) 홀수의 경우
만약, 7이라면 이진수로0111
(바꿀때 편의를 위해 앞에 0을 붙입니다)
먼저 짝수의 경우처럼 가장 뒤에 있는 0의 인덱스(idx)를 찾아 1로 바꿉니다. 그럼1111
이 됩니다.
bin_number[idx] = '1'
그런 다음 idx+1 의 인덱스 값을 0으로 바꿉니다. 그럼1011
이 되고 답이 됩니다.
bin_number[idx+1] = '0'
def solution(numbers):
answer = []
for number in numbers:
bin_number = list('0' + bin(number)[2:])
idx = ''.join(bin_number).rfind('0')
bin_number[idx] = '1'
if number % 2 == 1:
bin_number[idx+1] = '0'
answer.append(int(''.join(bin_number), 2))
return answer
파이썬에서는 bin 내장함수로 이진수를 쉽게 구할수 있습니다.
또한, int 내장함수로 int(s, 2)를 해주면 2진수 s를 10진수로 변환줍니다.