LeetCode/Top Interview 150

289. Game of Life

hyunkookim 2024. 12. 2. 17:14

289. Game of Life

 

https://youtu.be/fei4bJQdBUQ?si=woKf1nJYZF68r7P2

 

class Solution:
    def gameOfLife(self, board: List[List[int]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        # 1 : live if 2,3 else die
        # 0 : live if 3 else die
        # Original | New | State
        # 0        |  0  |   0
        #     1    |  0  |   1
        #     0    |  1  |   2
        #     1    |  1  |   3

        ROWS, COLS = len(board), len(board[0])

        def countNeighbors(r, c):
            nei = 0
            for i in range(r-1, r+2):  # 현재 셀의 상하좌우 범위 탐색
                for j in range(c-1, c+2):
                    # 현재 셀 제외 및 범위를 벗어난 셀 제외
                    if ((i == r and j == c) or 
                        i < 0 or j < 0 or 
                        i == ROWS or j == COLS):
                        continue
                    # 현재 셀 상태가 1 또는 3이면 살아있는 셀로 간주
                    if board[i][j] in [1, 3]:
                        nei += 1
            return nei

        for r in range(ROWS):
            for c in range(COLS):
                nei = countNeighbors(r, c)

                if board[r][c]:  # 현재 셀이 살아있는 경우
                    if nei in [2, 3]:  # 조건 만족 시 생존
                        board[r][c] = 3
                else:  # 현재 셀이 죽은 경우
                    if nei == 3:  # 조건 만족 시 탄생
                        board[r][c] = 2

        for r in range(ROWS):
            for c in range(COLS):
                if board[r][c] == 1:  # 죽음 유지
                    board[r][c] = 0
                elif board[r][c] in [2, 3]:  # 생명 탄생 또는 생존
                    board[r][c] = 1

 

 

아직 이해 안감!!

'LeetCode > Top Interview 150' 카테고리의 다른 글

20. Valid Parentheses  (0) 2024.12.02
228. Summary Ranges  (0) 2024.12.02
73. Set Matrix Zeroes  (0) 2024.12.02
219. Contains Duplicate II  (0) 2024.12.01
202. Happy Number  (0) 2024.12.01