문제 설명
정수 num을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.
이 함수의 역할은 num의 이진수 표현에서 비트가 교대로(alternating) 배치되어 있는지 검사하는 것입니다. 즉, 인접한 두 비트가 항상 서로 다른 값을 가져야 한다는 의미입니다.
예를 들어, 함수에 다음과 같은 입력이 주어진 경우를 살펴보겠습니다.
입력
const num = 5;
출력
const output = true;
출력 설명
숫자 5의 이진수 표현은 101이며, 각 자리의 비트가 1과 0으로 번갈아 나타나기 때문에 결과는 true입니다.
해결 접근 방식
이 문제는 다음과 같은 단계로 해결할 수 있습니다.
1. toString(2) 메서드를 사용하여 정수를 이진수 문자열로 변환합니다.
2. 첫 번째 비트를 기준값(curr)으로 저장합니다.
3. 나머지 비트를 순회하면서 현재 비트가 바로 앞 비트와 다른지 확인합니다.
4. 인접한 비트가 같은 값이면 즉시 false를 반환하고, 모든 비트가 교대로 배치되어 있다면 true를 반환합니다.
예제 코드
다음은 위 로직을 구현한 코드입니다.
const num = 5;
const isAlternating = (num = 1) => {
const binary = num.toString(2);
let curr = binary[0];
for(let i = 1; i < binary.length; i++){
const el = binary[i];
if(curr !== el){
curr = el;
continue;
};
return false;
};
return true;
};
console.log(isAlternating(num));실행 결과
true
위 코드에서 숫자 5는 이진수로 101이므로 모든 인접 비트가 서로 다른 값을 가지며, 함수는 true를 반환합니다. 반면 6(110)이나 7(111)처럼 연속된 동일한 비트가 존재하는 숫자는 false를 반환하게 됩니다.