[Bit Manipulation, Medium] Minimum Flips to Make a OR b Equal to c

송재호·2025년 4월 3일
0

https://leetcode.com/problems/minimum-flips-to-make-a-or-b-equal-to-c/?envType=study-plan-v2&envId=leetcode-75

못풀겠어서 솔루션 참고
int이므로 32번의 순회 중 조건에 맞는 경우에만 flips 카운트를 증가시키는 듯

각 변수에 i만큼 오른쪽 시프트를 하고, 1과 AND 연산을 해서 남은 비트를 체크한다.
(a >> i) & 1은 "a의 i번째 비트가 1이냐 0이냐"를 확인하는 코드이고,
이 문제는 비트 단위로 비교하는 문제이기 때문에 딱 i번째 비트만 보는 것이다.
(비트마스킹)

(aBit | bBit) != cBit 의 경우에는 아무것도 하지 않는다.
그 외의 경우

  • aBit | bBit == 0인데 cBit가 1이면 하나는 1로 바꿔야 함 (1 flip)
  • cBit == 0인데 aBit 또는 bBit가 1이면 각각 0으로 바꿔야 함 (각각 1 flip)
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;
    }
}
profile
식지 않는 감자

0개의 댓글