본문 바로가기

Algorithm/자료구조

(C++) - LeetCode (easy) 476. Number Complement

반응형

https://leetcode.com/problems/number-complement/description/

 

Number Complement - LeetCode

Can you solve this real interview question? Number Complement - The complement of an integer is the integer you get when you flip all the 0's to 1's and all the 1's to 0's in its binary representation. * For example, The integer 5 is "101" in binary and it

leetcode.com

bitmasking을 사용해보는 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. num의 bit길이를 저장할 변수 bitLength, 이를 위한 numCopy를 선언해 bitLength에 길이를 저장해줍니다.2. bitLength만큼의 bitMask를 저장해줍니다. int범위를 초과할 수 있으므로 1LL로 설정해 left shift연산자를 사용해 bitLength만큼 이동한 후 - 1을 한다면 길이만큼의 모든 bit가 1인 bitMask를 얻을 수 있습니다.

📔 풀이과정

num과 bitMask의 XOR 연산 결과를 반환해줍니다. n번째 bit가 서로 다르다면 1을 반환하므로써 toggle된 수를 얻을 수 있기 때문입니다.


📕 Code

📔 C++

class Solution {
public:
    int findComplement(int num) {
        int bitLength = 0;
        int numCopy = num;
        
        while(numCopy) {
            bitLength++;
            numCopy >>= 1;
        }

        int bitMask = (1LL << bitLength) - 1;
        return num ^ bitMask;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.