ধরা যাক একটি বাইনারি ম্যাট্রিক্স রয়েছে। আমরা ম্যাট্রিক্সের যেকোনো সংখ্যক কলাম সিলেক্ট করে সেগুলোর প্রতিটি সেল ফ্লিপ (০ কে ১ এবং ১ কে ০ করতে পারি। আমাদের লক্ষ্য হলো কিছু কলাম ফ্লিপ করার পর সর্বাধিক কতগুলো সারির সব মান সমান (সব ০ বা সব ১) করা যায়।
উদাহরণ
ইনপুট ম্যাট্রিক্স:
| 0 | 0 | 0 |
| 0 | 0 | 1 |
| 1 | 1 | 0 |
আউটপুট: 2
ব্যাখ্যা: প্রথম দুটি কলাম ফ্লিপ করলে শেষ দুটি সারির মান সমান হয়ে যায়।
সমাধানের ধাপসমূহ
x := matrix,m := সারির সংখ্যা,n := কলামের সংখ্যা,r := 0x-এ প্রতিটি সারিiএর জন্য:c := 0a := [l ^ 1 for l in i](সারিi-র ইনভার্ট করা ভার্সন)x-এ প্রতিটি সারিjএর জন্য:- যদি
j == iবাj == aহয়, তবেc := c + 1
- যদি
r := max(c, r)
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