Leetcode Java Minimize XOR

업데이트:

문제

Link

코드

class Solution {

  public int minimizeXor(int num1, int num2) {
    int bit1 = Integer.bitCount(num1);
    int bit2 = Integer.bitCount(num2);
    int result = num1;
    for (int i = 0; i < 32; i++) {
      if (bit1 > bit2 && ((1 << i) & num1) > 0) {
        result ^= 1 << i;
        bit1--;
      }
      if (bit1 < bit2 && ((1 << i) & num1) == 0) {
        result ^= 1 << i;
        bit1++;
      }
    }
    return result;
  }

}

결과

Link

설명

  1. 양의 정수 num1과 num2를 이용하여 아래의 규칙을 만족하는 양의 정수를 구하는 문제이다.
    • 결과를 만족하는 양의 정수는 num2와 동일한 비트 수를 가지고 있다.
    • 결과를 만족하는 양의 정수와 num1의 XOR(^) 비트 연산의 결과는 최솟값이다.
  2. 문제 풀이에 필요한 변수를 정의한다.
    • bit1과 bit2는 num1과 num2의 비트 값이 1인 갯수를 넣은 변수이다.
    • result에는 num1을 넣어준다.
  3. int의 범위 내인 0부터 32 미만까지 i를 증가시키면서 아래를 반복한다.
    • bit1이 bit2보다 크면서 1을 i번 좌측으로 비트를 이동시킨 값과 num1의 AND(&) 비트 연산의 결과가 0보다 큰 경우, result에 1을 i번 좌측으로 이동시킨 값과 자기 자신의 값을 XOR(^) 비트 연산 수행한 결과를 넣고 bit1을 감소시켜 비트 수를 조율한다.
    • bit1이 bit2보다 작으면서 1을 i번 좌측으로 비트를 이동시킨 값과 num1의 AND(&) 비트 연산의 결과가 0인 경우, result에 1을 i번 좌측으로 이동시킨 값과 자기 자신의 값을 XOR(^) 비트 연산 수행한 결과를 넣고 bit1을 증가시켜 비트 수를 관율한다.
  4. 반복이 완료되면 결과가 저장된 result를 주어진 문제의 결과로 반환한다.

소스

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

댓글남기기