Problem From.
https://leetcode.com/problems/single-number-ii/
오늘 문제는 주어진 array nums 에서 나오는 각각의 숫자는 1번만 나오거나 3번만 나오게 되어있다. 이 중에서 1번만 나오는 숫자를 반환하는 문제였다.
이 문제는 bit manipulation 을 이용하여 풀 수 있었는데, once 와 twice 라는 변수를 두고, 한번만 나온 비트는 once 에 두번 이상 나오면 twice 에 마스킹을 해두고 세번째에 나오면 twice 가 사라질 수 있도록 하였다. 그렇게 해서 마지막에 남은 once 를 반환해주면 되었다.
class Solution {
fun singleNumber(nums: IntArray): Int {
var once = 0
var twice = 0
for (num in nums) {
once = (once xor num) and twice.inv()
twice = (twice xor num) and once.inv()
}
return once
}
}