본문 바로가기

알고리즘/리트코드

289. Game of Life

각 칸에 이웃하는 주민의 수를 구해야하고, 그 주민수를 저장해놓고 비교할 때 사용해야한다. 따라서 객체에 저장을 해놓고 사용했다.  이웃하는 주민이 2보다 작거나, 3보다 크다면, 그 칸을 0으로 바꿔준다. 만약 3이라면 1로 바꿔준다.

const gameOfLife = function(board) {
  const hash = {};
  const directions = [[-1,-1], [-1,0], [-1,1], [0,-1], [0,1], [1,-1], [1,0], [1,1]];

  for (let r = 0; r < board.length; r++) {
    for (let c = 0; c < board[r].length; c++) {
      let numLiveNeighbors = 0;
      for (let [x, y] of directions) {
        if (r + x >= 0 && r + x < board.length && c + y >= 0 && c + y < board[r].length) {
          if (board[r + x][c + y] === 1) {
            numLiveNeighbors++;
          }
        }
      }
      hash[[r, c].toString()] = numLiveNeighbors;
    }
  }

  for (let r = 0; r < board.length; r++) {
    for (let c = 0; c < board[r].length; c++) {
      const storedLiveNeighbors = hash[[r, c].toString()];

      if (board[r][c] === 1) {
        if (storedLiveNeighbors < 2 || storedLiveNeighbors > 3) {
          board[r][c] = 0;
        }
      } else {
        if (storedLiveNeighbors === 3) {
          board[r][c] = 1;
        }
      }
    }
  }
};

'알고리즘 > 리트코드' 카테고리의 다른 글

22. Generate Parentheses  (0) 2022.04.16
33. Search in Rotated Sorted Array  (0) 2022.04.15
704. Binary Search  (0) 2022.04.13
62. Unique Paths  (0) 2022.04.10
46. Permutations  (0) 2022.04.06