0과 1로 구성된 행렬이 있다고 가정하고 행렬에서 원하는 수의 열을 선택하고 해당 열의 모든 셀을 뒤집을 수 있습니다. 셀을 변환하면 해당 셀의 값이 0에서 1 또는 1에서 0으로 변경됩니다. 몇 번의 뒤집기 후에 모든 값이 동일한 행의 최대 수를 찾아야 합니다. 따라서 행렬이 다음과 같으면 -
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 maxEqualRowsAfterFlips(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() print(ob.maxEqualRowsAfterFlips([[0,0,0],[0,0,1],[1,1,0]]))
입력
[[0,0,0],[0,0,1],[1,1,0]]
출력
2