반응형
https://leetcode.com/problems/minimize-xor
📕 풀이방법
📔 입력 및 초기화
다음 변수를 선언합니다.
📑 num1, num2를 이진수로 변환하는 bin_num1, bin_num2
📑 target_bit_count를 선언 해 필요한 1의 개수를 세줍니다.
📑 num1와 xor를 했을 때 문자열 x를 선언합니다.
📑 x의 bit 수 bit_count를 선언 후 0으로 초기화합니다.
📔 풀이과정
1. x XOR num1에서 x가 최소가 되려면 target_bit_count만큼 있으면서 num1와 최대한 같은 자리에 '1'이 존재해야 됩니다. 따라서 target_bit_count를 넘지 않게 bin_num1을 순회하면서 x를 생성해줍니다.
2. 부족한 x를 다듬어줍니다.
2-1. x의 길이가 target_bit_count보다 짧다면 부족한 1개수만큼 뒤에 1을 붙여줍니다.
2-2. x의 길이가 target_bit_count보다 길거나 같다면 나머지 bit들을 num1에 맞춰서 1을 왼쪽부터 만들어줍니다.
3. x를 10진수로 변환해 ans에 저장합니다.
📑 시간 복잡도
10^9이라면 10자리로 순회하므로 O(1)의 시간 복잡도, 공간 복잡도로 수행 가능합니다.
📔 정답 출력 | 반환
ans를 반환합니다.
📕 Code
📔 Python3
class Solution:
def minimizeXor(self, num1: int, num2: int) -> int:
bin_num1 = bin(num1)
bin_num2 = bin(num2)
target_bit_count = bin_num2.count('1')
x = ''
bit_count = 0
for char in bin_num1:
if char == '1':
bit_count += 1
if bit_count > target_bit_count:
x += '0'
else:
x += char
ans = 0
if len(x) < target_bit_count:
while bit_count < target_bit_count:
x += '1'
bit_count+=1
else:
x = list(x)
for i in range(len(x)-1,-1,-1):
if x[i] == '1':
continue
if bit_count < target_bit_count:
x[i] = '1'
bit_count += 1
for char in x:
offset = 1 if char == '1' else 0
ans = ans * 2 + offset
return ans
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.