본문 바로가기

Algorithm/Brute Force

(Python3) - LeetCode (Medium) : 2429. Minimize XOR

반응형

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

 


*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.