행렬이 있다고 가정해 보겠습니다. 해당 행렬에서 한 요소가 0이면 해당 행렬의 전체 행과 열을 0으로 만듭니다. 변환은 제자리에서 수행됩니다. 따라서 행렬이 -
인 경우1 | 0 | 1 |
1 | 1 | 1 |
1 | 1 | 1 |
그러면 출력은 -
가 됩니다.0 | 0 | 0 |
1 | 0 | 1 |
1 | 0 | 1 |
단계를 살펴보겠습니다 -
- n :=행 수, m :=열 수, 플래그 설정 :=false
- mat[0, 0] =0이면 플래그 설정 :=true
- set row :=false 및 col :=false
- 1~n
- 범위의 i에 대해
- mat[i, 0] =0이면 col :=True로 설정하고 루프를 끊습니다.
- 1 ~ m
- 범위의 i에 대해
- mat[0, i] =0이면 row :=True로 설정하고 루프를 끊습니다.
- 1~n
- 범위의 i에 대해
- 1 ~ m
- 범위의 j에 대해
- mat[i, j] =0이면 mat[i, 0] =0 및 mat[0, j] :=0으로 설정
- 1 ~ m
- 1~n
- 범위의 i에 대해
- 1 ~ m
- 범위의 j에 대해
- mat[i, 0] =0이고 mat[0, j] =0이면 mat[i, j] =0으로 설정
- 1 ~ m
- 플래그가 설정된 경우
- 0에서 n 사이의 i에 대해 mat [i, 0] :=0
- 0에서 m 사이의 i에 대해 mat[0, i] :=0
- 그렇지 않으면
- col이 설정되면 0에서 n 사이의 i에 대해 mat [i, 0] :=0
- 행이 설정되면 0에서 m 사이의 i에 대해 mat [0, i] :=0
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
class Solution(object): def setZeroes(self, matrix): n = len(matrix) m = len(matrix[0]) flag = False if matrix[0][0] == 0: flag = True row = False column = False for i in range(1,n): if matrix[i][0] == 0: column = True break for i in range(1,m): if matrix[0][i] == 0: row = True break for i in range(1,n): for j in range(1,m): if matrix[i][j] == 0: matrix[0][j] = 0 matrix[i][0]=0 for i in range(1,n): for j in range(1,m): if not matrix[i][0] or not matrix[0][j]: matrix[i][j] = 0 if flag: for i in range(n): matrix[i][0] = 0 for i in range(m): matrix[0][i]=0 else: if column: for i in range(n): matrix[i][0]=0 if row: for i in range(m): matrix[0][i]=0 return matrix ob1 = Solution() print(ob1.setZeroes([[1,0,1],[1,1,1],[1,1,1]]))
입력
[[1,0,1],[1,1,1],[1,1,1]]
출력
[[0, 0, 0], [1, 0, 1], [1, 0, 1]]