[Javascript] leetcode 103:Set Matrix Zeroes

이두팔·2021년 10월 28일

leetcode

목록 보기
3/5

Input: matrix = [[1,1,1],[1,0,1],[1,1,1]]
Output: [[1,0,1],[0,0,0],[1,0,1]]

2차원 배열에서 값이 0일 때 행과 열을 0으로 바꾸면 되는데
return 값 없이 matrix를 바로 바꾸면 된다.

const setZeroes = function (matrix) {
  const arr = [...matrix];
  let y = null;

  for (let i = 0; i < matrix.length; i++) {
    let x = null;

    for (let j = 0; j < matrix[i].length; j++) {
      if (matrix[i][j] === 0) {
        x = i;
        y = j;

        
        if (x > -1) arr[i] = Array.from({ length: matrix[i].length }).fill(0);
      }
    }
  }

  if (y > -1) {
    matrix.forEach((v, i) => arr[i][y] = 0)
  }

    
  matrix = arr;
  return matrix;
};

처음에 객체 복사해서 이렇게 풀었다가 콘솔에는 맞게 나오지만 result에 다르게 나와서 다시 풀었다.

const setZeroes = function (matrix) {
  let firstX = false;
  let firstY = false;

  for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++) {
      if (matrix[i][j] === 0) {
        if (i === 0) firstX = true;
        if (j === 0) firstY = true;

        matrix[0][j] = 0;
        matrix[i][0] = 0;
      }
    }
  }

  for (let i = 1; i < matrix.length; i++) {
    for (let j = 1; j < matrix[i].length; j++) {
      if (matrix[0][j] === 0 || matrix[i][0] === 0) {
        matrix[i][j] = 0;
      }
    }
  }

  if (firstX || firstY) {
    matrix.map((v, i) => {
      if (i === 0 && firstX) matrix[i] = Array.from({length: v.length}).fill(0)
      
      v.map((col, j) => {
        if (j === 0 && firstY) return v[j] = 0;
      })
    })
  }

  return matrix;
};

처음에 돌면서 firstX, firstY로 0에 관한 정보를 저장하고
그 다음에는 다시 돌면서 0일 때 값을 바꿔주고
i === 0이거나 j === 0의 값은 따로 마지막에 체크해서 값을 또 바꿔준다.

profile
Software Engineer

0개의 댓글