문제링크: https://leetcode.com/problems/set-matrix-zeroes/
매트릭스 중 0이 있을 경우 그 행과 열을 모두 0으로 변경하는 문제다.
입력 매트릭스를 탐색하면서 즉각적으로 값을 변경할 경우 연쇄적으로 동작하기 때문에 바꿀 행과 열을 따로 저장해 놓고 나중에 갱신한다.
Set
을 통해 미래에 변경할 row 와 col을 수집한다.Set
에 추가한다.rowToZeroes
를 순환해 0으로 변경해야 할 row를 모두 변경한다.colToZeroes
를 순환해 0으로 변경해야 할 col을 모두 변경한다.var setZeroes = function(matrix) {
// 순차적으로 바꾸면 뒤에 0이 다시 실행될 수 있기 때문에 바꿀 배열을 먼저 골라놔야함
// 모든 배열을 탐색해 0일 경우 해당 row col을 바꿀 예정이라고 set에 저장함
const [m, n] = [matrix.length, matrix[0].length];
const rowToZeros = new Set();
const colToZeros = new Set();
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (matrix[i][j] === 0) {
rowToZeros.add(i);
colToZeros.add(j);
}
}
}
// iterate rows to replace
for (let i of rowToZeros) {
matrix[i] = new Array(n).fill(0);
}
// iterate cols to replace
for (let i = 0; i < m; i++) {
for (let j of colToZeros) {
matrix[i][j] = 0;
}
}
return matrix;
};