Leetcode Python - 73. Set Matrix Zeroes
Leetcode #73 - Set Matrix Zeroes
리트코드의 문제 73 ‘Set Matrix Zeroes’을 파이썬으로 풀어 보도록 하겠습니다.
이 문제는 2중 list가 주어지면, 값으로 0이 있다면 행과 열을 전부 0으로 바꿔주는 문제입니다. 예를 들면 아래와 같습니다.
As is
[
[1,1,1],
[1,0,1],
[1,1,1]
]
To be
[
[1,0,1],
[0,0,0],
[1,0,1]
]
discuss를 보도록 하겠습니다.
- 첫째 행과 첫째 열에서 0가 있는지 체크
- 둘째 행 ~ 마지막 행, 둘째 열 ~ 마지막 열에서 0이 있으면 첫째 행과 첫째 열을 0으로 바꿔줍니다.
- 첫째 행과 첫째 열에 0이 있으면 필요 부분에 0으로 변경해줍니다.
- 마지막으로, 1)에서 확인했듯이 처음에 0이 있다면 첫째 행과 첫째 열을 0으로 변경해줍니다.
하나씩 구현해보면,
- 첫째 행과 첫째 열에서 0가 있는지 체크 ```python row_zero = False if 0 in list(zip(*matrix))[0]: row_zero = True
col_zero = False if 0 in matrix[0]: col_zero = True
2. 둘째 행 ~ 마지막 행, 둘째 열 ~ 마지막 열에서 0이 있으면 첫째 행과 첫째 열을 0으로 바꿔줍니다.
```python
for i in range(1, m):
for j in range(1, n):
if matrix[i][j] == 0:
matrix[i][0] = 0
matrix[0][j] = 0
- 첫째 행과 첫째 열에 0이 있으면 필요 부분에 0으로 변경해줍니다. ```python for i in range(1, m): if matrix[i][0] == 0: for j in range(1, n): matrix[i][j] = 0
for j in range(1, n): if matrix[0][j] == 0: for i in range(1, m): matrix[i][j] = 0
4. 마지막으로, 1)에서 확인했듯이 처음에 0이 있다면 첫째 행과 첫째 열을 0으로 변경해줍니다.
```python
if col_zero:
for j in range(n):
matrix[0][j] = 0
if row_zero:
for i in range(m):
matrix[i][0] = 0
전체 코드는 아래와 같습니다.
class Solution:
def setZeroes(self, matrix):
m = len(matrix)
n = len(matrix[0])
row_zero = False
if 0 in list(zip(*matrix))[0]:
row_zero = True
col_zero = False
if 0 in matrix[0]:
col_zero = True
for i in range(1, m):
for j in range(1, n):
if matrix[i][j] == 0:
matrix[i][0] = 0
matrix[0][j] = 0
for i in range(1, m):
if matrix[i][0] == 0:
for j in range(1, n):
matrix[i][j] = 0
for j in range(1, n):
if matrix[0][j] == 0:
for i in range(1, m):
matrix[i][j] = 0
if col_zero:
for j in range(n):
matrix[0][j] = 0
if row_zero:
for i in range(m):
matrix[i][0] = 0
시간복잡도는 O(n²) : 2중 loop
공간복잡도는 O(1) : 상수 m,n,i,j,col_zero,row_zero 선언