Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาจำนวนการเปลี่ยนบิตน้อยที่สุดเพื่อให้ Binary String สลับกัน (Python)

โจทย์

มี Binary String s สามารถ Flip บิตได้ (0↔1) ต้องการให้ String เป็น Alternating (ไม่มีบิตติดกันเหมือนกัน) หาจำนวนครั้งน้อยที่สุดที่ต้อง Flip

ตัวอย่าง: s = "11100011" → Output: 3 (Flip ตำแหน่ง 1, 4, 7 ได้ "10101010")

อัลกอริธึม

  1. นับจำนวน 0 และ 1 ในตำแหน่งคู่ (Even) และคี่ (Odd)
  2. มี 2 รูปแบบ Alternating: เริ่ม 0 หรือ เริ่ม 1
  3. คำนวณการ Flip ที่ต้องทำแต่ละรูปแบบ เลือกค่าน้อยที่สุด

โค้ด Python


def solve(s):
    change = 0
    even_1 = even_0 = 0
    odd_1 = odd_0 = 0
    for i in range(len(s)):
        if i % 2 == 0:
            if s[i] == '1': even_1 += 1
            else: even_0 += 1
        else:
            if s[i] == '1': odd_1 += 1
            else: odd_0 += 1
    
    # รูปแบบ 1: เริ่ม 1 (Even=1, Odd=0) -> flip even_0 + odd_1
    # รูปแบบ 2: เริ่ม 0 (Even=0, Odd=1) -> flip even_1 + odd_0
    if (even_1 + odd_0) > (even_0 + odd_1):
        change = even_0 + odd_1
    else:
        change = even_1 + odd_0
    return change

s = "11100011"
print(solve(s))  # Output: 3

Input / Output

Input:  "11100011"
Output: 3