바위타는 두루미
5.7 쌍끼리 맞바꾸기 본문
728x90
문제
명령어를 가능한 적게 사용하면서 주어진 정수의 짝 수 번째 비트의 값과 홀수 번째 비트의 값을 바꾸는 프로그램을 작성하라
(예: 0번째 비트와 1번째 비트를 바꾸고, 2번째 비트와 3번째 비트를 바꾸는 식)
해결법
이 문제를 풀때에도 다른 방향에서 생각해 볼 필요가 있다.
개별 비트 쌍 단위로 연산해 나가는 것은 어려울 수 있고 , 그다지 효율적이지 못한 것 같다.
따라서 홀수번째 비트를 먼저 살펴보고, 그다음 짝수번째 비트를 살펴보는 방식으로 진행해보자 .
홀수번째 비트만 1씩 쉬프트 하는 것이 가능할까?
모든 홀수 비트를 10101010( OxAA)로 마스킹 한다음에 , 오른쪽으로 1만큼 쉬프트해서 짝수번째 자리에 두면 된다.
짝수비트도 마찬가지로 처리하여 마지막에 두 비트를 합쳐주면 된다.
def swapOddEvenBit(x)
return ( ((x & 0xaaaaaaaa) >>> 1) | ((x & 0x55555555) << 1))
32비트 정수를 사용하여 작성된 코드이며, 64비트 정수에 적용하고 싶다면 마스크를 바꾸어야 할 것이다.
'Study > Interview준비' 카테고리의 다른 글
[개념정리] 수학 및 논리 퍼즐 (0) | 2019.08.04 |
---|---|
5.8 선그리기 (0) | 2019.08.03 |
5.6 변환 (0) | 2019.08.03 |
5.5 디버거 (0) | 2019.08.03 |
5.4 다음숫자 (0) | 2019.08.03 |
Comments