X와 O가 포함된 2D 보드가 있다고 가정합니다. X로 둘러싸인 모든 영역을 캡처합니다. 해당 영역에서 모든 O를 X로 변경하여 영역을 캡처합니다.
X | X | X | X |
X | 오 | 오 | X |
X | X | 오 | X |
X | 오 | X | X |
실행 후 출력은
X | X | X | X |
X | X | X | X |
X | X | X | X |
X | 오 | X | X |
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 보드가 없으면 빈 보드를 반환합니다.
- 0 ~ 행 수 – 1 −
- 범위의 i에 대해
- board[i, 0] ='O'이면 make_one(board, i, 0)
- board[i, length of row - 1] ='O'이면 make_one(board, i, length of row - 1)
- 0에서 열 수까지의 범위에 있는 i의 경우 – 1 −
- board[0, i] ='O'이면 make_one(board, 0, i)
- 보드[행 개수 – 1, i] ='O'이면 make_one(보드, 행 개수 – 1, i)
- 0에서 행 수까지의 범위에 있는 i의 경우
- 0에서 열까지의 범위에 있는 j의 경우
- 보드[i, j] ='O'이면 보드[i, j] ='X', 그렇지 않으면 1이면 보드[i, j] ='O'
- 0에서 열까지의 범위에 있는 j의 경우
- make_one은 다음과 같습니다 -
- i <0 또는 j <0 또는 i>=행 개수 또는 j>=열 개수 또는 보드[i, j] ='X' 또는 보드[i, j] ='1'이면 반환리>
- 보드[i, j] :=1
- make_one(보드, i + 1, j), make_one(보드, i - 1, j), make_one(보드, i, j + 1), make_one(보드, i, j - 1) 호출
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
class Solution(object): def solve(self, board): if not board: return board for i in range(len(board)): if board[i][0]=='O': self.make_one(board,i,0) if board[i][len(board[0])-1] == 'O': self.make_one(board,i,len(board[0])-1) for i in range(len(board[0])): if board[0][i]=='O': self.make_one(board,0,i) if board[len(board)-1][i] == 'O': self.make_one(board,len(board)-1,i) for i in range(len(board)): for j in range(len(board[i])): if board[i][j]=='O': board[i][j]='X' elif board[i][j]=='1': board[i][j]='O' return board def make_one(self, board,i,j): if i<0 or j<0 or i>=len(board) or j>=len(board[0]) or board[i][j]=='X' or board[i] [j]=='1': return board[i][j]='1' self.make_one(board,i+1,j) self.make_one(board,i-1,j) self.make_one(board,i,j+1) self.make_one(board,i,j-1) ob1 = Solution() print(ob1.solve([["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]))
입력
[["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]
출력
[['X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X'], ['X', 'O', 'X', 'X']]