কম্পিউটার টিউটোরিয়াল

বাইনারি স্ট্রিংকে অ্যালটারনেটিং बनानेতে ন্যূনতম ফ্লিপ সংখ্যা বের করা

একটি বাইনারি স্ট্রিং s দেওয়া আছে। একটি অপারেশনে একটি বিট ফ্লিপ করা যায় (0→1 বা 1→0)। স্ট্রিংকে "অ্যালটারনেটিং" বলা হয় যদি কোনো দুটি সন্নিহিত ক্যারেক্টর একই না হয়। স্ট্রিংকে অ্যালটারনেটিং बनानेতে ন্যূনতম কতগুলো অপারেশন দরকার সেটা বের করতে হবে।

ইনপুট: s = "11100011" → আউটপুট: 3। ইনডেক্স 1, 4, 7-এ বিট ফ্লিপ করলে "10101010" হয়ে যাবে যা পূর্ণ অ্যালটারনেটিং।

সমাধানের ধাপসমূহ

  • change := 0

  • even_1, even_0, odd_1, odd_0 := 0 (কনজেক্টিভ কাউন্টার)

  • i = 0 থেকে len(s)-1 পর্যন্ত লুপ:

    • যদি i জোড় (even): s[i]=='1' হলে even_1++, অন্যথায় even_0++
    • যদি i বিজোড় (odd): s[i]=='1' হলে odd_1++, অন্যথায় odd_0++
  • দুটি প্যাটার্ন সম্ভব: "101010..." (even_1 + odd_0 ফ্লিপ) বা "010101..." (even_0 + odd_1 ফ্লিপ)

  • change = min(even_1 + odd_0, even_0 + odd_1)

  • change রিটার্ন করুন

উদাহরণ (Python)

def solve(s):
    change = 0
    even_1 = even_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
    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))

ইনপুট

"11100011"

আউটপুট

3
  1. Python দিয়ে বাইনারি গ্রিড সাজাতে মিনিমাম সোয়াপ বের করার প্রোগ্রাম

  2. পাইথনে বাইনারি ট্রির সর্বোচ্চ অল্টারনেটিং পথের দৈর্ঘ্য বের করার প্রোগ্রাম

  3. পাইথনে স্ট্রিং s-কে পরিবর্তন করে t কে সাবস্ট্রিং बनानेয় ন্যূনতম অপারেশন বের করার প্রোগ্রাম

  4. পাইথনে একটি সংখ্যার গুণনীয়গুলোর ন্যূনতম যোগফল বের করার প্রোগ্রাম