문제 타입
- **배열(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
'TIL' 카테고리의 다른 글
[코테연습] 팰린드롬 만들기 (0) | 2025.01.20 |
---|---|
[코테연습] 연구 분배하기 (0) | 2025.01.19 |
[코테연습] 2683. Neighboring Bitwise XOR (0) | 2025.01.17 |
[코테연습] 1930. Unique Length-3 Palindromic Subsequences (0) | 2025.01.04 |
[코테연습] 1422. Maximum Score After Splitting a String (0) | 2025.01.01 |