[Python 문제풀이] 19일차 (끝)
2020. 7. 27. 11:00ㆍ03. 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 |