각 칸에 이웃하는 주민의 수를 구해야하고, 그 주민수를 저장해놓고 비교할 때 사용해야한다. 따라서 객체에 저장을 해놓고 사용했다. 이웃하는 주민이 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 |