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

পাইথনে বাইনারি ম্যাট্রিক্সে কলাম ফ্লিপ করে সর্বাধিক সমান সারি পাওয়ার প্রোগ্রাম

ধরা যাক একটি বাইনারি ম্যাট্রিক্স রয়েছে। আমরা ম্যাট্রিক্সের যেকোনো সংখ্যক কলাম সিলেক্ট করে সেগুলোর প্রতিটি সেল ফ্লিপ (০ কে ১ এবং ১ কে ০ করতে পারি। আমাদের লক্ষ্য হলো কিছু কলাম ফ্লিপ করার পর সর্বাধিক কতগুলো সারির সব মান সমান (সব ০ বা সব ১) করা যায়।

উদাহরণ

ইনপুট ম্যাট্রিক্স:

000
001
110

আউটপুট: 2

ব্যাখ্যা: প্রথম দুটি কলাম ফ্লিপ করলে শেষ দুটি সারির মান সমান হয়ে যায়।

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

  1. x := matrix, m := সারির সংখ্যা, n := কলামের সংখ্যা, r := 0
  2. x-এ প্রতিটি সারি i এর জন্য:
    • c := 0
    • a := [l ^ 1 for l in i] (সারি i-র ইনভার্ট করা ভার্সন)
    • x-এ প্রতিটি সারি j এর জন্য:
      • যদি j == i বা j == a হয়, তবে c := c + 1
    • r := max(c, r)
  3. r ফেরত দিন

পাইথন ইমপ্লিমেন্টেশন

class Solution:
    def solve(self, matrix):
        x = matrix
        m = len(matrix)
        n = len(matrix[0])
        r = 0
        for i in x:
            c = 0
            a = [l ^ 1 for l in i]
            for j in x:
                if j == i or j == a:
                    c += 1
            r = max(c, r)
        return r

ob = Solution()
matrix = [
    [0, 0, 0],
    [0, 0, 1],
    [1, 1, 0]
]
print(ob.solve(matrix))

ইনপুট

[[0,0,0], [0,0,1], [1,1,0]]

আউটপুট

2
  1. পাইথনে ২ডি ম্যাট্রিক্সে ডান ও নিচে চলা সীমাবদ্ধ রেখে সর্বোচ্চ কয়েন সংগ্রহ করার প্রোগ্রাম

  2. পাইথনে কলাম ফ্লিপ করে সর্বোচ্চ সমান রো বের করুন

  3. পাইথন প্রোগ্রাম: বাইনারি ম্যাট্রিক্সে ডুপ্লিকেট সারি খুঁজে বের করা

  4. পাইথন প্রোগ্রাম: তিন সংখ্যার মধ্যে সর্বোচ্চ (Maximum of Three)