Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

주변 지역 파이썬

<시간/>

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에서 열 수 - 1 −

    의 i에 대해
    • board[0, i] ='O'이면 make_one(board, 0, i)

    • if board[행의 개수 - 1, i] ='O'이면 make_one(보드, 행의 개수 - 1, i)

  • 범위 0에서 행 수까지의 i에 대해

    • 범위 0에서 열 수까지의 j에 대해

      • 보드[i, j] ='O'이면 보드[i, j] ='X', 그렇지 않으면 1이면 보드[i, j] ='O'

  • 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):
      """
      :type board: List[List[str]]
      :rtype: None Do not return anything, modify board in-place instead.
      """
      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'
   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)

입력

[["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"]]