Algorithm

Leetcode 461. Hamming Distance

KANG_G1 2023. 3. 17. 15:33

두 정수 사이의 해밍 거리는 해당 비트가 다른 위치의 수이다.
두 개의 정수 x와 y가 주어지면 두 정수 사이의 해밍 거리를 반환해줘야 한다.

 

해밍 거리란?

블록 부호 이론에서, 해밍 거리(Hamming distance)는 곱집합 위에 정의되는 거리 함수이다.
대략, 같은 길이의 두 문자열에서, 같은 위치에서 서로 다른 기호들이 몇 개인지를 센다.

 

예시

Input: x = 1, y = 4
Output: 2
Explanation:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑
위 화살표는 해당 비트가 다른 위치를 가리킨다.

 

문제 접근 방법

예시를 참조했을 때, 숫자를 2진법으로 처리가 필요해보였고

또한 비트가 언급된 걸로 보아서 비트연산자를 활용하면 되겠거니 싶었다.

0을 기점으로 서로 1이 나오는 거리를 리턴하는 것으로 해결이 가능했다.

 

x^y에 toString(2)를 적용해줬을 때, number type으로 나오기에

0을 기점으로 split()을 사용해 나누기 위해선 string으로 만들어 줄 필요가 있었다.

 

하지만 테스트에서 걸리게 되었는데, 정확히 의심이 가는 곳이 있었다.

// 테스팅

Input:93 73
Output:4
Expected:2

비트 연산자를 적용한 부분이었다.

통과하지 못한 코드를 살펴봤을 때 x^y.toString(2)로 작성을 해줘

y에만 toString이 적용된 것을 예상치 못했다.

 

(x^y).toString(2)괄호를 사용해 비트 연산 이후 toString이 적용되어지도록

처리를 해줬고 이후 테스트 통과가 가능했다.

 

/**
 * @param {number} x
 * @param {number} y
 * @return {number}
 */
var hammingDistance = function(x, y) {
    const result = String((x^y).toString(2)).split('0').join('').length;
    return result;
};