Leetcode 476. Number Complement
by EunHye Jung
476. Number Complement
양의 정수가 주어졌을때, 결과는 그것의 보수가 된다. 보수 전략은 이진수의 비트를 뒤집는것이다.
Note :
- 주어진 정수는 32비트 부호있는 정수의 범위임을 보장하다.
- 정수의 이진표현에서 선행 0비트가 없다고 가정할 수 있다.
Example 1: Input: 5 Output: 2 Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Example 2: Input: 1 Output: 0 Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
풀이코드
- 10진수 num을 2진수로 표현하는 방법은 num이 0이 될때까지 2로 나눠주면서 2로나눈 나머지 값을 이어주면 된다.
StringBuffer binaryNumSb = new StringBuffer(); while(num > 0) { binrayNumSb.append(num % 2); num /= 2; }
- 보수가 이진수의 비트를 뒤집는 방법이므로 10진수를 2진수로 만드느 방법을 거꾸로 적용시켜서 문제를 해결했다.
public int findComplement(int num) { int i = 0, res = 0; while (num > 0) { res = res + ((num % 2 == 1 ? 0 : 1) * (int) Math.pow(2, i++)); num /= 2; } return res; }
다른 사람의 코드 (비트연산 이용)
public int findComplement(int num) {
int bits = 0;
int n = num;
while (n > 0) {
n >>= 1;
bits++;
}
return ~num & (1 << bits) - 1;
}
참고
- 시프트연산자 »
n » i : n의 비트값을 i만큼 오른쪽으로 이동시킴, n / 2^(i)와 같은 결과를 가짐.
~ : Not 연산자
Subscribe via RSS