몇일 전에 풀어본 문제인데... 내킨김에 올려 봅니다.
다른 분들하고 다르게 일단 전체 맵을 만든 후에 마인을 찾고 마인 주변에 1씩 더해주는 방법을 썼습니다. unittest 부분은 다른 분들이 한 거 그냥 불여 보았습니다. 아직까지는 잘 이해가 안되지만 그냥 배꼈습니다. --[mgenome] 2006-1-26
1 import unittest
2
3 def markcount(r, i, j, n, m):
4 r[i][j] = '*'
5 for a in range(i-1, i+2):
6 for b in range(j-1, j+2):
7 if(-1<a<n and -1<b<m and r[a][b]!='*'): # verify index range and '*'
8 r[a][b] = str(int(r[a][b]) + 1)
9
10 def makematrix(input, n, m):
11 r = list()
12 for i in range(n):
13 r.append([])
14 for j in range(m):
15 r[i].append('0') #make zero matrix
16 for i in range(n):
17 for j in range(m):
18 if (input[i][j] == '*'): #find '*'
19 markcount(r, i, j, n, m) #count and marking
20 return r
21
22 def drawmatrix(input, n, m):
23 r = makematrix(input, n, m)
24 merge = []
25 for i in range(n):
26 merge.append("".join(r[i]))
27 return "\n".join(merge)
28
29 def main():
30 inputs = raw_input()
31 [n, m]= inputs.split()
32 matrix = []
33 while True:
34 inputs = raw_input()
35 if inputs == "": break
36 matrix.append(inputs)
37 print drawmatrix(matrix, int(n), int(m))
38
39 class drawmatrixTest(unittest.TestCase):
40 def testExample(self):
41 inp = [
42 '*...',
43 '....',
44 '.*..',
45 '....',
46 ]
47 expected = "*100\n2210\n1*10\n1110"
48
49 self.assertEquals(expected, drawmatrix(inp, 4, 4))
50
51 if __name__ == '__main__':
52 unittest.main(argv=('','-v'))
53 #main()