문제 확인하기
- 비트 연산을 활용하여 XOR 결과를 구합니다.
- 주어진 수들을 이진수로 표현하고, 가장 왼쪽 비트부터 차례대로 XOR 결과를 구해나갑니다.
- 이를 위해 mask 변수를 사용하여 현재 비트까지의 비트 마스크를 만들고, nums 리스트의 모든 수에 이 마스크를 적용하여 XOR 연산을 수행한 결과를 xor_set에 저장한 뒤 candidate 변수를 업데이트하면서 candidate XOR prefix 값이 xor_set에 있는지 확인하여 최대 XOR 값을 찾습니다.
3. 풀이 (Python, memory: 45332KB, time: 476ms)
def find_max_xor(nums):
max_xor = 0
mask = 0
for i in range(31, -1, -1):
mask |= (1 << i)
xor_set = set()
for num in nums:
xor_set.add(num & mask)
candidate = max_xor | (1 << i)
for prefix in xor_set:
if candidate ^ prefix in xor_set:
max_xor = candidate
break
return max_xor
n = int(input())
nums = list(map(int, input().split()))
print(find_max_xor(nums))