[Leetcode] 1009. Complement of Base 10 Integer (C++)
문제
1009. Complement of Base 10 Integer
코드
class Solution {
public:
int bitwiseComplement(int n) {
string s = "";
if (n == 0) return 1;
while (n){
s += (n%2 == 1) ? '0' : '1';
n /= 2;
}
int res = 0, power = 0;
while (s != ""){
res += pow(2, power) * (s[0]-'0');
power++;
s = s.substr(1);
}
return res;
}
};
--------------------------------------------------
class Solution {
public:
int bitwiseComplement(int N) {
int c = 1;
while(c<N) c = (c << 1) + 1;
return c^N;
}
};
접근
단순하게 직접 2진수로 바꾸고 이를 다시 10진수로 바꾸는 과정을 구현하였다. 어려움은 딱히 없었지만 디스커션에서 발견한 두번째 코드가 신박하여 가져와 보았다. 구현한 것처럼 직접 2진수를 complement 하는 것이 아닌 1로만 구성된 같은 길이의 2진수를 만들어 xor 연산을 실행한 것이다. 1을 0으로, 0을 1로 바꾸는 것이니 xor을 떠올렸다면 떠올렸을 만한 풀이라고 생각한다.
Author And Source
이 문제에 관하여([Leetcode] 1009. Complement of Base 10 Integer (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@keybomb/Leetcode-1009.-Complement-of-Base-10-Integer-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)