양의 정수가 있다고 가정하고 비트가 교차하는지 확인해야 합니다. 따라서 인접한 두 비트는 항상 다른 값을 갖습니다.
따라서 입력이 10과 같으면 10의 이진 표현이 1010이므로 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- p :=n AND 1
- n <2이면 -
- 참을 반환
- n :=n/2
- n이 0이 아닌 동안 −
- c :=n AND 1
- c XOR p가 0과 같으면 -
- 거짓 반환
- p :=c
- n :=n/2
- 참을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h> using namespace std; class Solution { public: bool hasAlternatingBits(int n) { bool p=n&1; bool c; if(n<2) return true; n>>=1; while(n){ c=n&1; if(c^p==0) return false; p=c; n>>=1; } return true; } }; main(){ Solution ob; cout << (ob.hasAlternatingBits(10)); }
입력
10
출력
1