본문 바로가기

Algorithm/Implementation

(Python3) - LeetCode (Medium) : 2425. Bitwise XOR of All Pairings

반응형

https://leetcode.com/problems/bitwise-xor-of-all-pairings

xor의 특성에 대해 파악해 해결한 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

다음 변수를 선언합니다.

📑 nums1의 xor을 저장할 xors1와 num2의 xor한 결과를 저장할 xors2를 선언해 각 배열들을 xor한 값을 각각 저장합니다.

📑 nums1, nums2의 길이 len1, len2를 선언 후 저장합니다.

📔 풀이과정

📑 10만이 배열 최대 길이이므로 O(n^2)로 풀 수 없습니다. xor의 특성을 이용해야 합니다. 예제로 살펴보겠습니다. 숫자들을 알파뱃으로 바꿔 표현하면 여러 경우에 대해 다음과 같이 표현할 수 있습니다.

1. nums1 = [a,b], nums2 = [c]인 경우

  1-1. xor된 원소들은 : a^c, b^c이 되며 이들을 모두 xor한 경우 a^b^c^c가 됩니다.

  1-2. 자기 자신을 xor하게 되면 0이되는 특성으로  a^b가 됩니다.

  1-3. 이를 통해 nums1의 길이가 짝수라면 홀수인 nums2는 xor처리를 통해 모두 0이되므로 xors1을 반환하면 됩니다.

2. nums1 = [a], nums2 = [b,c]

  2-1. xor된 원소들은 : a^b, a^c이 되며 이들을 모두 xor한 경우 a^b^c^c가 됩니다.

  2-2. 자기 자신을 xor하게 되면 0이되는 특성으로  a^b가 됩니다.

  2-3. 이를 통해 nums2의 길이가 짝수라면 경우 1과 비슷한 논리로 xors2를 반환하면 됩니다.

3. nums1 = [a,b], nums2 = [c,d]

  3-1. xor된 원소들은 : a^c, a^d, b^c, b^d며 이들은 모두 xor한 경우 a^c^a^d^b^c^b^d가 되며 각자 원소가 자기 자신에 대해 두 번씩 계산되므로 모두 0이 되며 따라서 0을 반환하면 됩니다.

4. nums1 = [a], nums2 = [b]

  4-1. 각 원소가 홀수번씩 계산되므로 xors1 ^ xors2를 반환하면 됩니다.


📕 Code

📔 Python3

class Solution:
    def xorAllNums(self, nums1: List[int], nums2: List[int]) -> int:
        xors1, xors2 = 0, 0
        for num in nums1:
            xors1 ^= num
        for num in nums2:
            xors2 ^= num
        len1, len2 = len(nums1), len(nums2)
        if len1 % 2 == 0 and len2 % 2 == 0:
            return 0
        if len1 % 2 == 0:
            return xors1
        if len2 % 2 == 0:
            return xors2
        return xors1 ^ xors2

 


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