본문 바로가기

프로그래밍/알고리즘

[비트 연산] leetCode - 461. Hamming Distance

문제 설명: int 값 2개가 주어졌을때 두 값을 비트 단위로 변경 한 후

각 자리가 다른 자리의 갯수를 세는 문제

 

문제 풀이 : 먼저 비트 연산에 대해서 알아보자

& : 각 자리의 비트가 모두 1 인 경우 1 , 아닌 경우 0

|  : 두 비트 중 1개라도 1이면 1

^ : 두개가 서로 다르면 1, 아니면 0

 

a >> i : a 의 모든 비트를 오른쪽으로 i칸 밀고 맨 왼쪽을 0으로 채움

a << i : a 의 모든 비트를 왼쪽으로 i 칸 밀고 맨 오른쪽을 0 으로 채움

 

이렇게 비트에 대해서 알고나서 

풀어보면 , 

먼저 두 개의 값을 ^ 로 해주면 서로 다른 비트 부분을 알 수 있다.

이떄 범위가 int 범위 안 이므로

 

for 문을 32 번 돌면서

>> 로 i 만큼 이동시켜본 후 그 값을 & 1 로 해본다

& 1 을 했을때 그 자리값이 1일때나 1이 나오므로 

각 자리가 다른 개수를 셀 수 있다.

 

풀이 코드 :  https://github.com/kwonhyucknae/algorithm_study/blob/master/src/com/leetCode/problem/HammingDistance.java