못풀겠어서 솔루션 참고
int이므로 32번의 순회 중 조건에 맞는 경우에만 flips 카운트를 증가시키는 듯
각 변수에 i만큼 오른쪽 시프트를 하고, 1과 AND 연산을 해서 남은 비트를 체크한다.
(a >> i) & 1
은 "a의 i번째 비트가 1이냐 0이냐"를 확인하는 코드이고,
이 문제는 비트 단위로 비교하는 문제이기 때문에 딱 i번째 비트만 보는 것이다.
(비트마스킹)
(aBit | bBit) != cBit
의 경우에는 아무것도 하지 않는다.
그 외의 경우
class Solution {
public int minFlips(int a, int b, int c) {
int flips = 0;
for (int i = 0; i < 32; i++) {
int aBit = (a >> i) & 1;
int bBit = (b >> i) & 1;
int cBit = (c >> i) & 1;
if ((aBit | bBit) != cBit) {
if (cBit == 1) {
// aBit | bBit == 0인데 cBit가 1이면 하나는 1로 바꿔야 함 (1 flip)
flips += 1;
} else {
// cBit == 0인데 aBit 또는 bBit가 1이면 각각 0으로 바꿔야 함 (각각 1 flip)
flips += aBit + bBit;
}
}
}
return flips;
}
}