바위타는 두루미

5.6 변환 본문

Study/Interview준비

5.6 변환

DoRoMii 2019. 8. 3. 18:45
728x90

문제

정수 A와 정수 B를 2진수로 표현했을 때, A를 B로 바꾸기 위해 뒤집어야 하는 비트의 개수를 구하는 함수를 작성하라 

 

입력 : 29(혹은 11101) , 15( 혹은 01111) 

출력 : 2

 

접근법

두 수의 각각의 비트중에서 다른 비트를 찾아내는 문제이기 때문에 XOR연산을 이용하면 매우 간단하게 풀린다. 

def bitSwapRequired(a, b):
    count = 0
    c = a^b
    while c != 0 :
        count += c & 1
        c >>=1
    return count

 

하지만 최하위 비트를 비교해가면서 한칸씩 쉬프트 하는 방법 대신 더 나은 방식을 찾아보자 

c & (c-1)을 하면 최하위 비트부터 차례대로 1을 없애 나갈 수 있다. 

def bitSwapRequired(a,b):
    count =0
    c = a^b
    while c!=0:
        count +=1
        c &= c-1
    return count

위의 방식은 면접에 간간히 등장하는 비트조작 문제중 하나이다. 

단번에 해결책을 떠올리기 어렵다면 해법을 기억해두자.

 

'Study > Interview준비' 카테고리의 다른 글

5.8 선그리기  (0) 2019.08.03
5.7 쌍끼리 맞바꾸기  (0) 2019.08.03
5.5 디버거  (0) 2019.08.03
5.4 다음숫자  (0) 2019.08.03
5.3 비트 뒤집기  (0) 2019.08.02
Comments