배열 A가 있다고 가정하고 (A[0] XOR X) + (A[1] XOR X) + … + A[n – 1] XOR X가 가능한 한 최소가 되도록 숫자 X를 찾아야 합니다.
따라서 입력이 [3, 4, 5, 6, 7]과 같으면 출력은 X =7, Sum =10
이 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- search_res() 함수를 정의합니다. arr, n 이 걸립니다.
- 요소 :=arr[0]
- 0에서 arr 크기의 범위에 있는 i에 대해
- arr[i]> 요소인 경우
- 요소:=arr[i]
- arr[i]> 요소인 경우
- p :=(요소 밑이 2의 로그) + 1의 정수
- X :=0
- 0~p 범위의 i에 대해
- cnt :=0
- 0~n 범위의 j에 대해
- arr[j] AND (2^i)가 0이 아니면
- cnt :=cnt + 1
- arr[j] AND (2^i)가 0이 아니면
- cnt> (n / 2)의 정수 부분이 0이 아닌 경우
- X :=X + (2^i)
- 합계 :=0
- 0에서 n 사이의 i에 대해
- 합계 :=합 +(X XOR arr[i])
- X 및 합계 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
from math import log2 def search_res(arr, n): element = arr[0] for i in range(len(arr)): if(arr[i] > element): element = arr[i] p = int(log2(element)) + 1 X = 0 for i in range(p): cnt = 0 for j in range(n): if (arr[j] & (1 << i)): cnt += 1 if (cnt > int(n / 2)): X += 1 << i sum = 0 for i in range(n): sum += (X ^ arr[i]) print("X =", X, ", Sum =", sum) arr = [3, 4, 5, 6, 7] n = len(arr) search_res(arr, n)
입력
[3, 4, 5, 6, 7]
출력
X = 7 , Sum = 10