https://leetcode.com/problems/neighboring-bitwise-xor
xor의 특성을 이용한 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
📑 derived의 xor한 결과를 저장할 xor_sum를 선언 후 0으로 초기화합니다.
📔 풀이과정
📑 derived 배열의 xor 특성
derived 배열은 인접한 orig∈al 배열의 xor 결과로 정의됩니다:
derived[i] = original[i] \oplus original[(i+1) \mod n]
derived 배열의 모든 값을 \oplus하면:
derived[0] \oplus derived[1] \oplus \dots \oplus derived[n-1]
이를 original 배열로 치환하면: (original[0] \oplus original[1]) \oplus (original[1] \oplus original[2]) \oplus \dots \oplus (original[n-1] \oplus original[0])
이 됩니다.
📑 XOR결과와 유효성의 관계
따라서 derived 배열의 모든 값을 xor 한 결과가 0 이라면 원형 관계를 만족하는 original 배열을 만들 수 있습니다.
derived[n-1] = original[n-1] \oplus original[0]
반대로 xor 결과가 0이 아니라면 원형 관계를 만족하는 original 배열을 만들 수 없습니다.
📑 풀이과정
📑 시간 복잡도: 배열 하나에 대한 for loop를 수행하므로 O(N)입니다.
📑 공간 복잡도: 추가 변수는 xor_sums하나이므로 O(1)입니다.
📔 정답 출력 | 반환
xor_sums가 0이라면 원형으로 계산가능한 원래 배열을 만들 수 있으므로 True를, 아니라면 False를 반환합니다.
📕 Code
📔 Python3
class Solution:
def doesValidArrayExist(self, derived: List[int]) -> bool:
xor_sums = 0
for num in derived:
xor_sums ^= num
return xor_sums == 0
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > Math' 카테고리의 다른 글
(Python3) - 프로그래머스(코딩테스트 입문) : 종이 자르기 (0) | 2024.11.03 |
---|---|
(Python3) - 프로그래머스(코딩테스트 입문) : 세균 증식 (0) | 2024.10.29 |
(C++) - LeetCode (easy) 1518. Water Bottles (0) | 2024.04.17 |
(C++) - LeetCode (easy) 1207. Unique Number of Occurrences (0) | 2023.12.07 |
(C++) - LeetCode (easy) 1037. Valid Boomerang (0) | 2023.10.13 |