70. Single Number
🎯 leetcode - 136. Single Number
🤔 나의 풀이
📌 문제
- 파이썬 알고리즘 인터뷰 70번 문제
- 비트 조작에 관련된 문제이다.
📌 날짜
2020.03.05
📌 시도 횟수
2 try
💡 Code
class Solution:
def singleNumber(self, nums: List[int]) -> int:
result = 0
for num in nums:
result ^= num
return result
💡 문제 해결 방법
- 이번 장은 '비트 조작'에 관한 것이었다.
- 그래서 자연스럽게 비트로 푸는 방법을 고려해서 풀게 되었다.
- XOR은 '두 값의 각 자릿수를 비교해, 값이 같으면 0, 다르면 1을 계산'하는 연산이다.
- 따라서 이 XOR의 특성을 십진수에 적용해서 풀면 된다!
> 모든 nums의 요소들을 다 차례대로 XOR 연산을 누적해서 처리하면
> 값이 짝수개인 요소들을 XOR 연산으로 처리하면 `num ^ num = 0` 0이 된다.
> 반면 값이 1개만 존재하는 요소는 결국 연산이 다 끝난 후 혼자 남게 된다.
- 예시로 [2, 1, 1, 13, 2]의 모든 값을 XOR으로 누적해서 처리해보자.
----------------------------------
num: 2 / XOR result: 2
num: 2 / XOR result: 0
num: 1 / XOR result: 1
------- 2진수로 출력해본 결과 -------
num: 0b10 / XOR result: 0b10
num: 0b10 / XOR result: 0b0
num: 0b1 / XOR result: 0b1
----------------------------------
> 따라서 특정 값이 짝수개만큼 나오면 0으로 상쇄되고, 홀수 개 등장한 값만 남게 됨을 알 수 있다.
💡 새롭게 알게 된 점
- XOR을 특성을 이해하게 되었다.
❌ (한번에 맞추지 못한 경우) 오답의 원인
Author And Source
이 문제에 관하여(70. Single Number), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eunseokim/70.-Single-Number저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)