https://leetcode.com/problems/single-number/
arr 가 주어진다.
arr 에는 두 쌍의 숫자들과 하나의 숫자가 들어있다.
정렬이 되어있지 않다고 했을 때 쌍이 없이 혼자 있는 수를 찾는 문제이다.
2중 for문을 사용하거나
HashMap, HashSet 을 사용하거나,
정렬 한 후에 i, i+1 인덱스를 이용하여 찾아도 일단 풀리긴 한다.
하지만 위의 방법들보다 더 획기적인 방법을 사용하면
O(N) 시간에 추가 메모리 없이 문제를 풀 수 있다.
바로 XOR bit 연산자를 사용하는 것이다.
재밌게도, XOR bit 연산자는 똑같은 두 수를 XOR 하면 0이 되어버리고,
0과 어떤 수 n을 XOR 하면 n 이 나온다.
이 점에 착안하여, arr 내에 모든 수를 계속 XOR 해보자.
짝이 있는 수들은 XOR 연산에 의해 0이 되어버리고,
혼자 있는 수는 0과 XOR 되면 혼자 있는 수 그대로 결과로 나온다.
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for(int num : nums){
result = (result^num);
}
return result;
}
}
이런 문제는 알고 있지 않으면 모르는 문제인 듯.
'Coding Interview' 카테고리의 다른 글
[Baekjoon] 2790번 F7 (0) | 2020.03.26 |
---|---|
[leetcode] Last Stone Weight (0) | 2020.02.11 |
[leetcode] Replace Elements with Greatest Element on Right Side (0) | 2020.02.03 |
Longest Increasing Subsequence 알고리즘 (0) | 2020.02.02 |
[Baekjoon] 2156번 포도주 시식 (0) | 2020.01.30 |