Algorithm/Implementation

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

킹우현 2024. 6. 9. 20:05

def solution(board):
    
    # 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류
    # 지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재
    
    answer = 0
    
    def return_boom_set(x,y):
        
        temp_set = set()
        
        for i in range(x-1,x+2):
            for j in range(y-1,y+2):
                if 0 <= i < n and 0 <= j < n:
                    temp_set.add((i,j))
                    
        return temp_set
    
    n = len(board)
    
    boom_set = set()
    
    for i in range(n):
        for j in range(n):
            if board[i][j] == 1:
                boom_set |= return_boom_set(i,j)
    
    for x, y in boom_set:
        board[x][y] = 1
    
    
    for i in range(n):
        for j in range(n):
            if board[i][j] == 0:
                answer += 1
                
    return answer

 

본 문제는 지뢰가 설치된 영역이 주어지고, 지뢰가 설치된 자리와 지뢰를 둘러싼 자리들이 위험지대라고 가정할 때 안전한 공간의 개수를 구하는 문제이다.

 

지뢰가 있는 좌표를 기준으로 위험지대 좌표들을 구하기 위해 return_boom_set 이라는 함수를 선언하는 방식으로 풀이하였다.