[LeetCode] 73. Set Matrix Zeroes

임혁진·2022년 8월 11일
0

알고리즘

목록 보기
6/64
post-thumbnail

73. Set Matrix Zeroes

문제링크: https://leetcode.com/problems/set-matrix-zeroes/

매트릭스 중 0이 있을 경우 그 행과 열을 모두 0으로 변경하는 문제다.

Solution

Iteration & Sets

입력 매트릭스를 탐색하면서 즉각적으로 값을 변경할 경우 연쇄적으로 동작하기 때문에 바꿀 행과 열을 따로 저장해 놓고 나중에 갱신한다.

Alogorithm

  • Set을 통해 미래에 변경할 row 와 col을 수집한다.
  • 모든 배열을 순회하고 0이 있을 경우 변경 예정 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;
};

profile
TIL과 알고리즘

0개의 댓글