바위타는 두루미

5.7 쌍끼리 맞바꾸기 본문

Study/Interview준비

5.7 쌍끼리 맞바꾸기

DoRoMii 2019. 8. 3. 18:52
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