문제 설명: 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이 나오므로
각 자리가 다른 개수를 셀 수 있다.
'프로그래밍 > 알고리즘' 카테고리의 다른 글
동적 프로그래밍 - 예제 (0) | 2022.08.18 |
---|---|
동적 프로그래밍 (0) | 2022.08.03 |
[이진검색트리] leetCode - 530. Minimum Absolute Difference in BST (0) | 2020.05.07 |
[백트래킹] leetCode - Generate Parentheses (0) | 2020.05.03 |
leetCode - daily coding (0) | 2020.04.20 |