2022년 04월 12일 화요일 - 치킨 마시따


오늘 올려볼 문제는 289번 Game of Life 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진 leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

맞왜틀 2번 시전했다


입력


사진에서도 볼 수 있듯이 2차원 int배열 1개가 입력으로 들어온다.



풀이 및 코드


문제를 참고해주길 바란다.


오늘은 처음부터 정답을 생각해냈다.

처리를 편하게 하기위해 board보다 길이가 2씩 큰 2차원 배열(arr)을 만든다.

각각 board의 값을 8방향에다가 더해준다.

그러면 arr에는 각 cell에 주변에 1이 몇개있는지 저장하고 있게된다.

이렇게 구한 arr과 board의 관계를 규칙에 맞게끔 바꿔주는걸로 문제를 풀었다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public void gameOfLife(int[][] board) {
        int[][] arr = new int[board.length + 2][board[0].length + 2];

        int[] xDir = {-1, 0, 1};
        int[] yDir = {-1, 0, 1};

        for(int i = 1; i <= board.length; i++)
           for(int j = 1; j <= board[0].length; j++)
           {
               arr[i][j] -= board[i - 1][j -1];         // 현재 cell에도 더해주는 구문이 있기 때문에 미리 빼두는 작업
               for(int y : yDir)
                   for(int x : xDir)
                       arr[i + y][j + x] += board[i - 1][j -1];
           }

        for(int i = 1; i <= board.length; i++)
        {
           for(int j = 1; j <= board[0].length; j++)
           {
               int num = arr[i][j];

               if(board[i - 1][j - 1] == 0)
               {
                   if(num == 3) board[i - 1][j - 1] = 1;
               }
               else
               {
                   if(num < 2 || 3 < num) board[i - 1][j - 1] = 0;
               }
           }
        }
    }
}




제출 화면

leetcode 문제 맞았습니다


indexing을 잘못해놓고는 "맞는데 왜 틀리지"를 2번 시전했었다.

내일은 실수을 안하고 한 번에 딱 풀었으면 좋겠다.


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

+ Recent posts