양수 n이 있다고 가정하면 주어진 숫자 n의 비트 패턴에서 연속 1의 수가 왼쪽에서 오른쪽으로 증가하는지 여부를 확인해야 합니다.
따라서 입력이 n =1775와 같으면 n의 이진 표현이 11011101111이므로 출력은 True가 되므로 연속 1의 수는 [2, 3, 4]이며 증가합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- bits_pattern :=n의 새 비트 목록
- bit_count :=bits_pattern의 크기
- p_cnt :=0, c_cnt :=0
- i :=0
- 내가
- bits_pattern[i]가 1과 같으면
- c_cnt :=c_cnt + 1, 나는 :=나는 + 1
- 그렇지 않으면 bits_pattern[i - 1]이 0이면
- i :=i + 1, c_cnt :=0
- 다음 반복으로 이동
- 그렇지 않으면
- c_cnt
- 0을 반환
- i :=i + 1, p_cnt :=c_cnt, c_cnt :=0
- bits_pattern[i]가 1과 같으면
- 거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
def solve(n): bits_pattern = list(bin(n)) bit_count = len(bits_pattern) p_cnt = 0 c_cnt = 0 i = 0 while i < bit_count: if bits_pattern[i] == '1': c_cnt += 1 i += 1 elif bits_pattern[i - 1] == '0': i += 1 c_cnt = 0 continue else: if c_cnt < p_cnt: return 0 i += 1 p_cnt = c_cnt c_cnt = 0 if p_cnt > c_cnt and c_cnt != 0: return False return True n = 1775 print(solve(n))
입력
1775
출력
True