코린이의 소소한 공부노트

[LeetCode/Easy] 476. Number Complement 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 476. Number Complement

무지맘 2022. 11. 30. 15:30

1. Input

1) 정수 num

 

2. Output

1) num2의 보수

2) 2의 보수(complement)2진수로 표현했을 때 01, 10으로 바꾼 후 다시 10진수로 변환한 수를 말한다.

 

3. Constraint

1) 1 <= num < 2^31

 

4. Example

Input: num=5 -> Output: 2

설명: 52진수로 표현하면 101 -> 01을 뒤집으면 010 -> 이를 다시 10진수로 바꾸면 2

 

5. Code

1) 첫 코드(2022/06/30)

long n =(int)(Math.log10(num) / Math.log10(2));
return (int)((long)Math.pow(2,n+1)-1-num);

  - 어떤 수 x와 x의 2의 보수 y가 있을 때 x+y를 2진수로 표현하면 1로 가득 찬 수가 된다.

  - 5 = 101(2), 2=010(2)이므로 둘을 더하면 111(2) = 7 = 2^3 -1이 되는 것을 이용한 코드