숫자 num이 있다고 가정하고 num의 이진 표현에 0과 1의 연속 블록 수가 동일한지 확인해야 합니다. 0과 모두 1인 숫자는 0과 1로 구성된 블록의 수로 간주되지 않는다는 점을 명심해야 합니다.
따라서 입력이 num =455와 같으면 이 숫자의 이진 표현이 111000111이므로 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- bin_form :=num의 이진 형식
- one_count :=새로운 세트
- 카운트:=1
- 0에서 bin_form - 1의 비트 수 범위에 있는 i에 대해
- bin_form[i]이 bin_form[i + 1]과 같으면
- 카운트 :=카운트 + 1
- 그렇지 않으면
- count를 one_count에 삽입
- 카운트:=1
- bin_form[i]이 bin_form[i + 1]과 같으면
- one_count의 크기가 1과 같으면
- 참 반환
- 거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시 코드
def solve(num): bin_form = bin(num).replace("0b", "") one_count = set() count = 1 for i in range(len(bin_form)-1): if bin_form[i] == bin_form[i + 1]: count += 1 else: one_count.add(count) count = 1 if len(one_count) == 1: return True return False num = 455 print(solve(num))
입력
455
출력
True