[Python 문제풀이] 19일차 (끝)

2020. 7. 27. 11:0003. Resources/Python

728x90
반응형

Day 19

Q25. Minesweeper

In the popular Minesweeper game you have a board with some mines and those cells that don't contain a mine have a number in it that indicates the total number of mines in the neighboring cells. Starting off with some arrangement of mines we want to create a Minesweeper game setup.

제출 코드

import numpy as np

def minesweeper(matrix):
import numpy as np

def minesweeper(matrix):
    row = len(matrix)
    col = len(matrix[0])

    MineCounterMat = np.zeros((row, col))

    for idx_row in range(row):
        for idx_col in range(col): 
            MineCounter = 0

            if idx_row == 0:
                idx_row_set = [idx_row, idx_row + 1]
            elif idx_row == row-1:
                idx_row_set = [idx_row - 1, idx_row]
            else:
                idx_row_set = [idx_row - 1, idx_row, idx_row + 1]

            if idx_col == 0:
                idx_col_set = [idx_col, idx_col + 1]
            elif idx_col == col-1:
                idx_col_set = [idx_col - 1, idx_col]
            else:
                idx_col_set = [idx_col - 1, idx_col, idx_col + 1]

            for mine_row in idx_row_set:
                for mine_col in idx_col_set:
                    if not ((mine_row == idx_row) and (mine_col == idx_col)):
                        if matrix[mine_row][mine_col]:
                            MineCounter = MineCounter + 1

            MineCounterMat[idx_row][idx_col] = MineCounter
    return MineCounterMat

작성 흐름

# Test case

import numpy as np

matrix = [[True, False, False],
          [False, True, False],
          [False, False, False]]

# 알고리즘 생각해보기
# 자기 자신의 값을 제외하고, 현재 인덱스의 지뢰 개수는 현재 위치 값의 주위에 있는 true 값의 개수

# 행의 갯수
row = len(matrix)

# 열의 갯수
col = len(matrix[0])

# 지뢰 개수를 담을 매트릭스
MineCounterMat = np.zeros((row, col))

# 매트릭스 확인
print(matrix)

# 행, 열 개수 확인
print(row)
print(col)

# 전체 매트릭스의 인덱스에 대해 반복
for idx_row in range(row):
    for idx_col in range(col): 

        # 주위의 지뢰 갯수 찾기
        MineCounter = 0

        # 매트릭스의 테두리 부분은 주위 개수가 다르기 때문에 인덱스를 지정해주어야함
        # 행 인덱스 지정
        if idx_row == 0:
            idx_row_set = [idx_row, idx_row + 1]
        elif idx_row == row-1:
            idx_row_set = [idx_row - 1, idx_row]
        else:
            idx_row_set = [idx_row - 1, idx_row, idx_row + 1]

        # 열 인덱스 지정
        if idx_col == 0:
            idx_col_set = [idx_col, idx_col + 1]
        elif idx_col == col-1:
            idx_col_set = [idx_col - 1, idx_col]
        else:
            idx_col_set = [idx_col - 1, idx_col, idx_col + 1]

        # 지정한 인덱스 확인
        print(idx_row_set)
        print(idx_col_set)

        # 지정한 인덱스에 대해서 반복
        for mine_row in idx_row_set:
            for mine_col in idx_col_set:
                print("row: %d, col: %d" % (idx_row, idx_col))
                print("mine_row: %d, mine_col: %d" % (mine_row, mine_col))

                # 자기 자신을 제외한 주위의 값을 확인해서 지뢰 개수 세기
                if not ((mine_row == idx_row) and (mine_col == idx_col)):
                    if matrix[mine_row][mine_col]:
                        MineCounter = MineCounter + 1
                        print("Mine Counter: %d" % (MineCounter))

        # 현재 인덱스에 지뢰 개수 넣기
        MineCounterMat[idx_row][idx_col] = MineCounter
        print(MineCounterMat)
반응형

'03. Resources > Python' 카테고리의 다른 글

[Python/SQL] PyMySQL - 기본 코드 흐름  (0) 2021.08.23
[Python/SQL] PyMySQL - 패키지 설치  (0) 2021.08.21
[Python 문제풀이] 18일차  (0) 2020.07.26
[Python 문제풀이] 17일차  (0) 2020.07.25
[Python 문제풀이] 16일차  (0) 2020.07.24