2022년 04월 12일 화요일 - 치킨 마시따
오늘 올려볼 문제는 289번 Game of Life 이라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘도 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;
}
}
}
}
}
제출 화면
indexing을 잘못해놓고는 "맞는데 왜 틀리지"를 2번 시전했었다.
내일은 실수을 안하고 한 번에 딱 풀었으면 좋겠다.
내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.
'LeetCode 문제 풀이' 카테고리의 다른 글
[LeetCode] 700번 문제를 풀어보았다. (ft. java) (0) | 2022.04.14 |
---|---|
[LeetCode] 59번 문제를 풀어보았다. (ft. java) (0) | 2022.04.13 |
[LeetCode] 1260번 문제를 풀어보았다. (ft. java) (0) | 2022.04.11 |
[LeetCode] 682번 문제를 풀어보았다. (ft. java) (0) | 2022.04.10 |
[LeetCode] 347번 문제를 풀어보았다. (ft. java) (0) | 2022.04.09 |