문제 링크 : Single Number
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
let numsMap = new Map();
nums.forEach(e => {
numsMap.get(e) ? numsMap.set(e, 2) : numsMap.set(e,1)
})
let result = 1
for(let key of numsMap.keys()) {
if(numsMap.get(key) === 1) {
result = key
break;
}
}
return result;
};
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
return nums.reduce((acc, cur) => acc ^ cur)
};
비트 연산자로 주어진 두 비트에서 다른 값은 1, 같은 값은 0을 반환
예시)
[1,2,2]
1의 비트는 01, 2는 10
1 ^= 2를 계산하면 11이 되어 3
3 ^= 2를 계산하면 11과 10을 xor 연산하니 01이 되어 1
결과는 1만 남게 됨
즉, 같은 숫자를 두번 xor 연산하게 되면 최초의 숫자만 남음
ex) 1 ^ 2 ^ 2 = 1