-문제 내용 : 주어진 숫자의 2진수형 보수를 출력하라
-접근 방법
- 10진수의 수를 2진수로 바꾼다
- 2진수의 수에 11111 이런식으로된 이진수와 XOR를 처리한다
1번의 경우는 내장함수로 변환이 어렵지 않다.
혹시 숫자로 꼭 해야한다면 10진수 들어온 값을 1비트씩 오른쪽으로 shift 시킨 후 1과 AND 처리하면 된다.
2번의 2진수 11111... <- 이걸 만들어 내는게 중요한데
다음과 같이 2가지 경우가 가능하다.
2의 length만큼 11111... 문자열 만든 후 Integer 변화하는 방법과
Bit Operation으로 처리하는 방법인데 문제 취지상 bit operation으로 푸는게 맞는 것 같다.
주어진 문제를 보면 2진수의 시작은 꼭 1로 된다고 써있는데 이를 이용하면 이렇다.
10001
이 주어졌을 때 맨 첫글자인 1은 절대로 보수의 대상이 되지 않는다.
즉
10000 - 1
을 하면
1111이 되고 이는
10001 ^ 1111을 처리 해도 답에는 문제가 없다.
아래는 이 두가지 경우에 대한 코드이다.
var bitwiseComplement = function(N) {
let bits = N.toString(2);
let mask = parseInt(new Array(bits.length).fill('1').join(''),2);
return N ^ mask;
};
var bitwiseComplement = function(N) {
let bits = N.toString(2);
let mask = Math.pow(2,bits.length) - 1;
return N ^ mask;
};
728x90
반응형
'Problem Solving' 카테고리의 다른 글
Insert into a Binary Search Tree (0) | 2020.10.07 |
---|---|
Rotate List (0) | 2020.10.07 |
Remove Covered Intervals (0) | 2020.10.04 |
Maximum Number of Visible Points (0) | 2020.10.04 |
Even Odd Tree (0) | 2020.10.04 |