수를 이진수로 바꾸었을 때 최초의 0 이 아닌수의 자리 값(가중치)을 출력하는게 문제이다.
예를 들면
12 = 00....01100 정답은 4 (100) ^ | 10 = 00....01010 정답은 2 (10) ^ |
이걸 구하려면 어떻게 해야할까?
잠깐생각하고
정답은 아래에..
간단하게 비트연산으로 해결볼 수 있음 ㅇㅇ
어떤 수 x 는 a1(00....000) 이렇게 나타날 수 있음
뭔말인고 하니 1이 최초의 0이 아닌 수를 나타내고 a는 그 이후 숫자임
x=a1(00....000) 라고 하면 (-x) 는 => ~(x)+1 => (~a)0(111...111) + 1 => (~a)1(000....000)
따라서 x & -x 를 하면 정답을 아주 빠르게 구할 수 있음
a1(00....000) (x)
& ~a1(00....000) (-x)
=========================
000010000000000
굳?
아까 올린 자료랑 연계되니까 꼭 참고하셈!
아까 문제 50줄 미만임 풀이
댓글 0