[프로그래머스]안전지대

allnight5·2022년 12월 1일
0

프로그래머스 입문

목록 보기
44/53

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

지뢰는 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)
profile
공부기록하기

0개의 댓글