본문 바로가기
TIL

[코테연습] 2425. Bitwise XOR of All Pairings

by 크라00 2025. 1. 18.

https://leetcode.com/problems/bitwise-xor-of-all-pairings/description/?envType=daily-question&envId=2025-01-16

 

문제 타입

  • **배열(Array)**와 비트 조작(Bit Manipulation) 문제
  • XOR 연산과 배열 크기의 특성을 활용한 최적화 문제

문제 분석

  • 두 배열 nums1과 nums2가 주어짐.
  • 가능한 모든 (nums1[i], nums2[j]) 쌍의 XOR 값을 계산하고, 결과를 모두 합산해야 함.
  • XOR의 특성을 활용:
    • a⊕a=0a \oplus a = 0: 같은 숫자를 XOR하면 결과는 0.
    • a⊕0=aa \oplus 0 = a: 0과 XOR하면 자기 자신.
    • XOR은 교환법칙과 결합법칙을 만족함.
  • 최적화를 위해 배열의 크기가 홀수인지 여부를 사용:
    • nums1.length % 2 == 1이면 nums1의 모든 숫자가 nums2의 XOR 값과 짝을 이룸.
    • nums2.length % 2 == 1이면 nums2의 모든 숫자가 nums1의 XOR 값과 짝을 이룸.
  • 배열 크기가 짝수인 경우 해당 배열의 XOR 값은 결과에 영향을 미치지 않음.

문제 풀이

  • 1. 배열의 XOR 값 계산
    • nums1과 nums2 각각의 전체 XOR 값을 계산.
    • xor1 = nums1의 모든 요소 XOR
    • xor2 = nums2의 모든 요소 XOR
  • 2. 배열 길이에 따라 XOR 결과 결정
    • nums1.length % 2 == 1: nums2의 XOR 결과가 최종 결과에 반영.
    • nums2.length % 2 == 1: nums1의 XOR 결과가 최종 결과에 반영.
  • 3. 최종 결과 반환
    • 두 조건에 따라 결과를 XOR 연산하여 반환.

 

 

- java

 

class Solution {
    public int xorAllNums(int[] nums1, int[] nums2) {
        int xor1 = 0, xor2 = 0;

        // nums1의 모든 값 XOR
        for (int num : nums1) {
            xor1 ^= num;
        }

        // nums2의 모든 값 XOR
        for (int num : nums2) {
            xor2 ^= num;
        }

        int result = 0;

        // nums1 배열의 크기가 홀수면 nums2의 모든 XOR 값을 사용
        if (nums1.length % 2 == 1) {
            result ^= (long) xor2;
        }

        // nums2 배열의 크기가 홀수면 nums1의 모든 XOR 값을 사용
        if (nums2.length % 2 == 1) {
            result ^= (long) xor1;
        }

        return result;
    }
}

 

- python

 

class Solution:
    def xorAllNums(self, nums1: List[int], nums2: List[int]) -> int:
        xor1 = 0
        xor2 = 0

        for num in nums1 :
            xor1 ^= num
        
        for num in nums2 : 
            xor2 ^= num
        
        result = 0

        if len(nums1) % 2 == 1 :
            result ^= xor2
        
        if len(nums2) % 2 == 1 :
            result ^= xor1
        
        return result