티스토리 뷰

💡 문제 해결 아이디어

  • 중요한 점: 원본 보드에 수정을 가하면 안된다!!
  • (원본 보드에 수정을 가하면, 지뢰가 없는 위험지대를 지뢰가 있다고 착각할 수 있다.)
  • product함수를 이용해, 깔끔하게 코딩해본다.

이해를 돕기위한 예시.

💻 작성된 코드

from itertools import product

def solution(board):
    size = len(board)
    # 원본 board가 변경되는 것을 막기 위해, 별도의 보드를 만든다.
    board_copy = [[0] * size for _ in range(size)]
    
    # 주변 셀들을 탐색하기 위한 준비.
    case = [-1, 0, 1]

    # 보드의 각 셀에 대해서 반복한다.
    for x, y in product(range(size), range(size)):
        if board[x][y]:
            # 만약 지뢰가 있다면, 해당 셀을 둘러싼 모든 주변 셀들을 마킹한다.
            for for_x, for_y in product(case, case):
            	# 다만, 보드 사이즈를 벗어나는지 우선 확인한다. 
                if 0 <= x + for_x < size and 0 <= y + for_y < size:
                    board_copy[x + for_x][y + for_y] = 1

    # 각 줄의 안전지대(0)의 개수를 세서 합친다.
    count = sum([row.count(0) for row in board_copy])
    
    return count
댓글