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