Leetcode Java Surrounded Regions
업데이트:
문제
코드
class Solution {
public void solve(char[][] board) {
for (int i = 0; i < board.length; i++) {
if (board[i][0] == 'O') {
this.dfs(i, 1, board);
}
if (board[i][board[0].length - 1] == 'O') {
this.dfs(i, board[0].length - 2, board);
}
}
for (int i = 0; i < board[0].length; i++) {
if (board[0][i] == 'O') {
this.dfs(1, i, board);
}
if (board[board.length - 1][i] == 'O') {
this.dfs(board.length - 2, i, board);
}
}
for (int i = 1; i < board.length - 1; i++) {
for (int j = 1; j < board[0].length - 1; j++) {
if (board[i][j] == 'o') {
board[i][j] = 'O';
} else if (board[i][j] == 'O') {
board[i][j] = 'X';
}
}
}
}
private void dfs(int i, int j, char[][] board) {
if (i == 0 || j == 0 || i == board.length - 1 || j == board[0].length - 1 || board[i][j] == 'X' || board[i][j] == 'o') {
return;
}
if (board[i][j] == 'O') {
board[i][j] = 'o';
}
this.dfs(i + 1, j, board);
this.dfs(i - 1, j, board);
this.dfs(i, j + 1, board);
this.dfs(i, j - 1, board);
}
}
결과
설명
-
주어진 ‘O’와 ‘X’의 값들로 차있는 2차원 배열 board를 이용하여 4방향이 ‘X’로 이루어진 ‘O’만 남기고 나머지를 ‘X’로 바꾸는 문제이다.
-
0부터 행의 개수만큼 반복하여 외각의 값인 board[i][0]과 board[i][$board[0].legnth - 1$]의 값이 ‘O’인지 검증하여 그 옆의 값 위주로 검증하여 주변이 ‘X’인 ‘O’만 ‘o’로 변경하여 대상을 표시한다.
-
0부터 열의 개수만큼 반복하여 외각의 값인 board[0][i]]과 board[$board.legnth - 1$][i]의 값이 ‘O’인지 검증하여 그 옆의 값 위주로 검증하여 주변이 ‘X’인 ‘O’만 ‘o’로 변경하여 대상을 표시한다.
-
외각을 제외한 모든 행과 열을 반복하여 수정된 board를 이용하여 ‘o’인 값만 ‘O’로 변경해주고, 나머지는 ‘X’로 전부 바꾸어주어 문제를 해결한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기