PythonCodeFight-Day19

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.

제출 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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

작성 흐름

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 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)