2개 이하로 다른 비트

yejichoi·2023년 10월 17일
0

알고리즘 스터디

목록 보기
119/153
post-thumbnail

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

TIL

''.join(bin_number)

문자열 리스트 bin_number 내의 문자열 요소들을 하나의 문자열로 합치는 역할

bin_number = ['0', '1', '1', '0', '1']
result = ''.join(bin_number)
print(result)  # 결과: '01101'

0개의 댓글