Leetcode Java Number Complement

업데이트:

문제

Link

코드

class Solution {

  public int findComplement(int num) {
    int sum = 1;
    while (sum < num) {
      sum = (sum << 1) | 1;
    }
    return sum - num;
  }

}

결과

Link

설명

  1. num을 이진수로 변환하여 해당 보수로 변환된 정수를 반환하는 문제이다.
    • 예를 들어, 5는 이진수로 101로 표현하며 해당 값의 보수는 010으로 2를 주어진 문제의 결과로 반환하면 된다.
  2. num의 이진수를 모두 1로 변환한 값을 저장할 sum을 1로 저장한다.
    • num의 최솟값은 1이므로, 해당 값부터 시작한다.
  3. sum이 num보다 작을 때 까지 아래를 반복한다.
    • sum에 sum의 비트를 좌측으로 1칸 이동시킨 값과 1의 OR(|) 비트 연산의 결과를 넣어준다.
  4. num의 이진수를 모두 1로 변환한 값에 num을 뺀 값이 보수가 되므로, 해당 값을 주어진 문제의 결과로 반환한다.
    • 간단한 예로, $1010 = 1111 - 0101$ 이므로 1010(10)의 보수는 0101(5)이다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기