다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
def solution(board):
answer = 0
board_map = [[False]*len(board[0]) for i in range(len(board))]
# 아래 우측 아래 우측 우측상단 자기자리 위 좌측상단 좌측 좌측아래
dx = [0, 1, 1, 1,0, 0,-1,-1,-1]
dy = [1, 1, 0,-1,0,-1,-1, 0,1]
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j] == 1:
for d in range(len(dx)):
if i+dx[d]<0 or j+dy[d]<0 or i+dx[d]==len(board) or j+dy[d]==len(board[0]):
continue
board_map[i+dx[d]][j+dy[d]] = True
for i in board_map:
answer += i.count(False)
return answer
def solution(board):
n = len(board)
danger = set()
for i, row in enumerate(board):
for j, x in enumerate(row):
if not x:
continue
danger.update((i+di, j+dj) for di in [-1,0,1] for dj in [-1, 0, 1])
return n*n - sum(0 <= i < n and 0 <= j < n for i, j in danger)