본문 바로가기

알고리즘/프로그래머스

[ Python ] - 안전지대(120866)

728x90
반응형

문제 설명


제한사항

  • board는 n * n 배열입니다.
  • 1 ≤ n ≤ 100
  • 지뢰는 1로 표시되어 있습니다.
  • board에는 지뢰가 있는 지역 1과 지뢰가 없는 지역 0만 존재합니다.

입출력 예


입출력 예 설명 

입출력 예 #1

  • (3, 2)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선 총 8칸은 위험지역입니다. 따라서 16을 return합니다.

입출력 예 #2

  • (3, 2), (3, 3)에 지뢰가 있으므로 지뢰가 있는 지역과 지뢰와 인접한 위, 아래, 좌, 우, 대각선은 위험지역입니다. 따라서 위험지역을 제외한 칸 수 13을 return합니다.

입출력 예 #3

  • 모든 지역에 지뢰가 있으므로 안전지역은 없습니다. 따라서 0을 return합니다.

solution.py

def solution(board):
    answer = 0  # 안전한 지역의 칸 수를 저장할 변수 초기화
    # board를 순회하며 각 지점에 대해 검사
    for i, line in enumerate(board):
        for j, dot in enumerate(line):
            # 만약 현재 지점이 지뢰(1)라면 주변 지역을 검사
            if dot == 1:
                # 현재 지점의 주변 8칸(위, 아래, 좌, 우, 대각선)을 순회
                for i2 in range(i-1 if i-1 >= 1 else 0, i+2 if i+2 <= len(board) else len(board)):
                    for j2 in range(j-1 if j-1 >= 1 else 0, j+2 if j+2 <= len(board[0]) else len(board[0])):
                        # 만약 주변 지점이 지뢰가 아니라면(-1이 아니라면) 위험 지역으로 표시(-1)
                        if board[i2][j2] != 1:
                            board[i2][j2] = -1
    # 전체 보드를 다시 순회하며 안전한 지역(0)의 칸 수를 계산
    for line in board:
        answer += line.count(0)
    # 안전한 지역의 칸 수를 반환
    return answer
반응형

 

728x90
반응형