Complement of Base 10 Integer

Complement of Base 10 Integer

 

Explore - LeetCode

LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore.

leetcode.com

-문제 내용 : 주어진 숫자의 2진수형 보수를 출력하라

 

-접근 방법

  1. 10진수의 수를 2진수로 바꾼다
  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