2개 이하로 다른 비트
양의 정수 x에 대한 함수 f(x)를 다음과 같이 정의합니다.
- x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수
정수들이 담긴 배열 numbers가 매개변수로 주어집니다. numbers의 모든 수들에 대하여 각 수의 f 값을 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.
테.케 9,10 시간 초과
from collections import Counter
def solution(numbers):
answer = []
binary = []
for i in numbers:
for j in range(i+1, (10**15)+1): # 100,001
#print(i,bin(i),bin(j),j, "xor", i^j,bin(i^j), Counter(bin(i^j)))
#print(i,j)
counter = Counter(bin(i^j))
if counter['1'] == 1 or counter['1'] == 2:
answer.append(int(j))
#print(answer)
break
return answer
# 짝수, 홀수 나눠서 접근
def solution(numbers):
answer = []
for number in numbers:
bin_number = list('0' + bin(number)[2:]) # 0을 추가하여 이진수의 길이를 맞춰
print(bin_number,bin(number))
idx = ''.join(bin_number).rfind('0') #가장 오른쪽에서 처음 나타나는 '0'의 인덱스
print(bin_number, idx)
bin_number[idx] = '1'
if number % 2 == 1: # 홀수
bin_number[idx+1] = '0'
answer.append(int(''.join(bin_number), 2)) # 2진수 -> 10진수
return answer
문자열 리스트 bin_number 내의 문자열 요소들을 하나의 문자열로 합치는 역할
bin_number = ['0', '1', '1', '0', '1']
result = ''.join(bin_number)
print(result) # 결과: '01101'