leetcode-461.Hamming Distance
by EunHye Jung
Leetcode 461. Hamming Distance
문제
두 정수(integer) 사이의 해밍거리는 비트값이 다른 위치의 개수를 뜻한다.
x, y가 주어졌을때, 해밍거리를 계산하라.
Note: 0 ≤ x, y < 2^31.
Example:
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
풀이코드
- 2진수 비트수를 담는 int형 배열 두개를 가지고, 주어진 x,y값을 2진수르 변환한 후 해밍거리값을 계산했다.
public static final int N = 32;
public int[] getBinary(int input) {
int[] binary = new int[N];
int idx = N - 1;
while (input > 0) {
if (input % 2 == 1) {
binary[idx] = 1;
}
input /= 2;
idx--;
}
return binary;
}
public int hammingDistance(int x, int y) {
int[] xBinary = getBinary(x);
int[] yBinary = getBinary(y);
int distance = 0;
for (int i = 0; i < N; i++) {
if (xBinary[i] != yBinary[i]) {
distance++;
}
}
return distance;
}
다른 사람의 코드
- XOR연산을 수행한 후, Integer.bitCount()을 쓰니 1줄로 문제를 해결했다ㅇ0ㅇ…
public int hammingDistance(int x, int y) {
return Integer.bitCount(x ^ y);
}
- 역시 XOR연산을 이용하였지만, 비트연산을 통해 해밍거리를 계산했다.
public int hammingDistance(int x, int y) {
int xor = x ^ y, count = 0;
for (int i=0;i<32;i++) count += (xor >> i) & 1;
return count;
}
공부할것
- 비트연산
Subscribe via RSS