ปัญหา
ให้ตัวเลข num ตรวจสอบว่าในรูปแบบไบนารี จำนวนบล็อกติดต่อกันของ 0 และ 1 เท่ากันหรือไม่ (ไม่นับ 0 และตัวเลขที่เป็น 1 ทั้งหมด)
ตัวอย่าง
num = 455 → binary = 111000111 → บล็อก: 111, 000, 111 → ความยาว 3,3,3 → True
แนวคิดการแก้ปัญหา
- แปลงเป็นสตริงไบนารี (ตัด '0b')
- นับความยาวบล็อกติดต่อกันของ 0 และ 1
- เก็บความยาวในเซต → ถ้าขนาดเซต = 1 → ทุกบล็อกยาวเท่ากัน
โค้ดตัวอย่าง
def solve(num):
bin_str = bin(num)[2:]
blocks = set()
count = 1
for i in range(len(bin_str)-1):
if bin_str[i] == bin_str[i+1]:
count += 1
else:
blocks.add(count)
count = 1
blocks.add(count) # บล็อกสุดท้าย
return len(blocks) == 1
print(solve(455)) # True
อินพุต / เอาต์พุต
Input: 455 Output: True