반응형
https://leetcode.com/problems/number-complement/description/
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;
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > 자료구조' 카테고리의 다른 글
(C++) - LeetCode (easy) 506. Relative Ranks (0) | 2023.04.07 |
---|---|
(C++) - LeetCode (easy) 500. Keyboard Row (0) | 2023.04.05 |
(C++) - LeetCode (easy) 448. Find All Numbers Disappeared in an Array (0) | 2023.03.20 |
(C++) - LeetCode (easy) 414. Third Maximum Number (0) | 2023.03.12 |
(C++) - LeetCode (easy) 387. First Unique Character in a String (0) | 2023.02.27 |