바위타는 두루미
5.6 변환 본문
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