Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 동일한 행의 최대 수를 얻기 위해 플립 열 수를 찾는 프로그램은 무엇입니까?

<시간/>

이진 행렬이 있다고 가정하고 주어진 행렬에서 원하는 수의 열을 선택하고 해당 열의 모든 셀을 뒤집을 수 있습니다. 셀 변환은 셀 값을 반전시키는 것을 의미합니다. 몇 번의 뒤집기 후에 모든 값이 동일한 최대 행 수를 찾아야 합니다. 따라서 행렬이 다음과 같다면

0 0 0
0 0 1
1 1 0

출력은 2가 됩니다. 이는 처음 두 열의 값을 변환한 후 마지막 두 행의 값이 같기 때문입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • x :=행렬, m :=행 수 및 n :=열 수 및 r :=0

  • x의 각 요소 i에 대해

    • c :=0

    • a :=i의 모든 요소 l에 대한 목록, l 삽입 XOR i

    • x의 각 요소 j에 대해

      • j =i 또는 j =a이면 c를 1만큼 증가

    • r :=c 및 r의 최대값

  • 리턴 r

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

class Solution(object):
   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